Скорость выборки CoreData зависит от количества параметров в NSPredicate? - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь найти способ оптимизировать некоторые из моих запросов на выборку CoreData. В настоящее время у меня есть NSP-предикаты, в которых есть 2 или 3 параметра для поиска. Они все проиндексированы.

Быстрее ли иметь один индекс, по которому я могу искать, или несколько, по которым я могу искать? Кроме того, индексы для int быстрее, чем, скажем, индекс для строки?

1 Ответ

2 голосов
/ 22 февраля 2012

Что, безусловно, помогает, это убедиться, что вы выбрали записи, которые различают в первую очередь. Например, выбор только пары записей с определенным значением ключа происходит намного быстрее (с доступным индексом), чем выбор всех активных записей, если 90% записей активны И выбор чего-то другого одновременно. В этом случае вы, вероятно, должны быть еще лучше, удалив индекс в недискриминирующем поле, чтобы убедиться, что индекс используется в дискминирующем поле.

Кроме того, предикат с оператором or будет намного медленнее, чем без него. Выбор по целым числам будет быстрее, чем выбор по строкам, но если оба они проиндексированы, разница будет небольшой.

Выбор траектории вместо ключа также отрицательно влияет на производительность. (Один пример, который я недавно использовал, предикат:

product.subgroup.code == %@

Выбирает из 150 000 товаров правильные сбои (в течение 0,1 с), в то время как:

product.subgroup.maingroup.code == %@

Выбирает из 150 000 продуктов нужные за 1,5 сек.

В основных данных вы можете указать только один атрибут, который будет проиндексирован в редакторе модели данных. В реальных базах данных SQL вы можете индексировать сразу несколько атрибутов. Афаик, в основных данных нельзя использовать советник по индексам.

Тестирование с использованием реальной базы данных в приборах (используйте инструмент для извлечения основных данных) поможет вам найти узкие места и, возможно, лучший ответ для вашего случая.

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