LIKE
поиск обходится дорого, независимо от того, проиндексированы ли искомые атрибуты.
Многие приложения, в том числе и собственные, Apple, избегают этой проблемы, ограничивая поиск способами, которые пользователь не заметит. Например, поиск при наборе в приложении, таком как Контакты, на самом деле не хочет сопоставлять запрос со всеми возможными подстроками имен людей; вместо этого он соответствует людям, чье имя или фамилия начинаются с запроса.
Для дальнейшей оптимизации учтите также, что вы, вероятно, можете обойтись без полного подкованного в юникоде, с учетом регистра и диакритического соответствия соответствия, которое LIKE
и BEGINSWITH
дадут вам. Пример Apple DerivedProperty показывает, как вы можете получить гораздо лучшую производительность, сохраняя «нормализованную» (т. Е. Все тот же случай, без диакритических знаков, прочий посторонний материал) версию вашего поискового свойства и используя предикаты, основанные на лексикографическом порядке (например, normalizedLastName >= "foo" && normalizedLastName < "fop"
).
Более подробную информацию об этих и связанных трюках можно найти в некоторых сеансах Core Data из прошлых WWDC, особенно 2010 Сессия 137, «Оптимизация производительности базовых данных в iPhone OS» .