CoreData. В чем разница между индексами и индексами?
Я ищу, чтобы ускорить запросы к моему экземпляру CoreData с поддержкой SQL (отображение записей, отсортированных по дате). Я знаю, что индексирование может помочь уменьшить время запроса, но в чем разница между:
выделение сущности, которой принадлежит атрибут, а затем добавление списка атрибутов, разделенных запятыми, в поле индексы, как показано здесь:
или выделение атрибута, а затем проверка индексированного поля, как показано здесь:
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