CoreData. В чем разница между индексами и индексами?

Я ищу, чтобы ускорить запросы к моему экземпляру CoreData с поддержкой SQL (отображение записей, отсортированных по дате). Я знаю, что индексирование может помочь уменьшить время запроса, но в чем разница между:

выделение сущности, которой принадлежит атрибут, а затем добавление списка атрибутов, разделенных запятыми, в поле индексы, как показано здесь:

enter image description here

или выделение атрибута, а затем проверка индексированного поля, как показано здесь:

enter image description here

2 ответов


добавление строки с одним атрибутом в Indexes список эквивалентен опции Indexed для этого атрибута: он создает индекс для атрибута, чтобы ускорить поиск в запросы.

на Indexes список предназначен для составные индексы. Составные индексы полезны, когда вы знаете, что будете искать значения этих атрибутов, объединенных в WHERE пункт Запрос:

SELECT * FROM customer WHERE surname = "Doe" AND firstname = "Joe";

это утверждение может использовать составной индекс surname, firstname. Этот индекс также будет полезен, если вы просто выполните поиск surname, но не если вы только ищите firstname. Подумайте об индексе, как о телефонной книге: Сначала он сортируется по фамилии, затем по имени. Поэтому важен порядок атрибутов.

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


на WWDC 2017 apple обновила это, чтобы вместо этого сделать с помощью Fetch Index(см.: https://developer.apple.com/videos/play/wwdc2017/210/?time=997) Чтобы добавить его, выберите объект и перейдите в Editor ->Add Fetch Index