Плохая производительность Core Data содержит предикат - PullRequest
0 голосов
/ 05 октября 2011

Я использую NSFetchedResultsController, чтобы показать некоторые результаты поиска в UITableView. Результаты поиска запрашиваются по следующему предикату:

[NSPredicate predicateWithFormat:@"(plainText CONTAINS %@)", _searchString]

Объект, в котором выполняется поиск, имеет около 25 000 объектов. Свойство plainText содержит строковое значение, содержащее примерно 700 слов каждое.

Этот поиск занимает около 20 секунд, что слишком медленно.

Есть ли способ оптимизировать производительность?

Я смотрел сессию WWDC 2010, где она говорит о нормализации ключевых слов в отдельную сущность, чтобы избежать использования CONTAINS. Это способ улучшить его, только у меня есть 700 ключевых слов каждое. Делая это 700 х 25 000 = 17 500 000 ключевых слов. Я сомневаюсь, что это улучшится. Должен ли я даже попробовать?

1 Ответ

3 голосов
/ 05 октября 2011

Поиск атрибута из 700 слов в 25 000 объектов для строки действительно будет медленным, да.Ваша идея wwdc верна - вы хотите создать отдельную сущность, представляющую собой одно «ключевое слово», с отношением ко многим обратно к вашим сущностям.Таким образом, вы очень быстро найдете одно ключевое слово сущности, а затем очень быстро найдете сущности из ваших 25 000.Таким образом, вы не будете искать в каждой очень длинной строке.

tldr;да, тебе стоит попробовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...