Что такое индексы в инспекторе модели данных XCode Core-Data - PullRequest
21 голосов
/ 19 декабря 2011

В Xcode вы можете добавить «индексы» для сущности в инспекторе модели данных.

Xcode sidebar showing the Indexes view

Для скриншота я дважды нажал «добавить», так что «запятая, разделенные свойства» - просто значение по умолчанию.

Что это за индексы?
Они имеют какое-либо отношение к индексированным атрибутам? И если у них есть какая разница между указанием индексов в этом инспекторе и выбором «индексированных» для отдельного атрибута?

Ответы [ 3 ]

15 голосов
/ 03 апреля 2015

Оптимизация поиска и сортировки основных данных

Как видно из заголовка, индексирование должно ускорить поиск и сортировку вашей базы данных.Однако замедляет сохранение изменений в постоянном хранилище.Это имеет значение, когда вы используете NSPredicate и NSSortDescriptor объекты в вашем запросе.

Допустим, у вас есть две сущности: PBOUser и PBOLocation (много ко многим) .Вы можете увидеть его свойства на изображении ниже:

enter image description here

Предположим, что в базе данных есть 10 000 пользователей и 50 000 местоположений.Теперь нам нужно найти каждого пользователя с адресом электронной почты, начинающимся с a.Если мы предоставляем такой запрос без индексации, Базовые данные должны проверять каждую запись (в основном 10 000) .

Но что, если он проиндексирован (другими словами, отсортирован по email по убыванию) ?-> Затем Core Data проверяет только те записи, которые начинаются с a.Если базовые данные достигают b, поиск прекращается, поскольку очевидно, что больше нет записей, чья электронная почта начинается с a, поскольку она проиндексирована.

Как включить индексацию для модели базовых данных изв Xcode:

enter image description here
или:
enter image description here

Надеемся, что они эквивалентны: -)

Но что если вы хотите: письма начинаются с a, а имя начинается с b Вы можете сделать это, проверяя INDEXED для name свойства для PBOUser сущности, или:

enter image description here

Вот как вы можете оптимизировать свою базу данных :-)

6 голосов
/ 19 декабря 2011

Используйте список индексов, чтобы добавить составные индексы к объекту. Составной индекс - это индекс, который охватывает несколько атрибутов или связей. Составной индекс может сделать поиск быстрее. Имена атрибутов и отношений в вашей модели данных являются наиболее распространенными индексами. Вы должны использовать хранилище SQLite, чтобы использовать составные индексы.

4 голосов
/ 15 июля 2016

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

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

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

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

...