Подтвердить что ты не робот

CoreData. Какая разница между индексами и индексацией?

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

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

введите описание изображения здесь

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

введите описание изображения здесь

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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