Исходная выборка основных данных медленная

Я получаю серию объектов из большой базы данных. Для каждого поиска имеется от 1 до 20 результатов. Используя запрос на выборку, выполните следующие действия:

NSPredicate *indexPredicate = [NSPredicate predicateWithFormat:
 @"index == %@",indexNumber];

Я могу получить результаты за сравнительно короткий промежуток времени.

CoreData: annotation: total fetch execution time: 0.0623s for 9 rows.

Однако при слиянии всех предикатов с [NSCompoundPredicate orPredicateWithSubpredicates: для выполнения выборки в одной операции скорость падает.

CoreData: annotation: total fetch execution time: 0.3890s for 195 rows.

Я попробовал индексирование, установил выборки и ограничения партии, но не смог уменьшить общее время выборки. Я также попытался выполнить запросы на выборку одновременно один за другим с помощью GDC, но у меня возникли проблемы с настройкой. Как уменьшить время для извлечения этих данных?

1 ответ

Объединение 20 индексных запросов с помощью OR - это большое сравнение в выборке. Вы можете улучшить ситуацию, собирая значения индекса в массив, а затем используя одно сравнение с IN. Что-то вроде

NSArray *indexesToFetch = // A bunch of NSNumbers with index numbers of interest
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"indexNumber in %@", indexesToFetch];

Если у вас есть много данных для поиска, это еще много работы. Но использование IN для чего-то подобного будет, как правило, намного быстрее, чем использование целой группы OR.

licensed under cc by-sa 3.0 with attribution.