Что, безусловно, помогает, это убедиться, что вы выбрали записи, которые различают в первую очередь. Например, выбор только пары записей с определенным значением ключа происходит намного быстрее (с доступным индексом), чем выбор всех активных записей, если 90% записей активны И выбор чего-то другого одновременно. В этом случае вы, вероятно, должны быть еще лучше, удалив индекс в недискриминирующем поле, чтобы убедиться, что индекс используется в дискминирующем поле.
Кроме того, предикат с оператором or будет намного медленнее, чем без него.
Выбор по целым числам будет быстрее, чем выбор по строкам, но если оба они проиндексированы, разница будет небольшой.
Выбор траектории вместо ключа также отрицательно влияет на производительность.
(Один пример, который я недавно использовал, предикат:
product.subgroup.code == %@
Выбирает из 150 000 товаров правильные сбои (в течение 0,1 с), в то время как:
product.subgroup.maingroup.code == %@
Выбирает из 150 000 продуктов нужные за 1,5 сек.
В основных данных вы можете указать только один атрибут, который будет проиндексирован в редакторе модели данных. В реальных базах данных SQL вы можете индексировать сразу несколько атрибутов. Афаик, в основных данных нельзя использовать советник по индексам.
Тестирование с использованием реальной базы данных в приборах (используйте инструмент для извлечения основных данных) поможет вам найти узкие места и, возможно, лучший ответ для вашего случая.