Что такое индексы в инспекторе модели данных Core-Data Xcode
В Xcode вы можете добавить "Индексы" для объекта в инспекторе модели данных.
![Xcode sidebar showing the Indexes view]()
Для скриншота я дважды нажал "добавить", чтобы "запятая, разделенная, свойства" была только значением по умолчанию.
Что именно эти индексы?
Они имеют какое-либо отношение к индексированным атрибутам? И если у них есть разница между указанием индексов в этом инспекторе и выбором "Индексированный" для отдельного атрибута?
Ответы
Ответ 1
Оптимизация поиска и сортировки основных данных
Как гласит название, индексирование ускоряет поиск и сортировку вашей базы данных. Однако замедляет сохранение изменений в постоянном хранилище. Это важно, если вы используете объекты NSPredicate
и NSSortDescriptor
в своем запросе.
Скажем, у вас есть два объекта: PBOUser
и PBOLocation
(многие для многих). Вы можете увидеть его свойства на изображении ниже:
![enter image description here]()
Предположим, что в базе данных 10 000 пользователей и 50 000 мест. Теперь нам нужно найти каждого пользователя с электронной почтой, начиная с a
. Если мы предоставим такой запрос без индексации, Core Data должен проверить каждую запись (в основном 10 000).
Но что, если он проиндексирован (другими словами, отсортирован по электронной почте)? → Затем Core Data проверяет только те записи, которые начинаются с a
. Если Core Data достигнет b
, то он прекратит поиск, потому что очевидно, что записей больше нет, чей адрес электронной почты начинается с a
, поскольку он индексируется.
Как включить индексирование в модели Core Data изнутри Xcode:
![enter image description here]()
или
![enter image description here]()
Надеюсь, они эквивалентны: -)
Но что, если бы вы хотели: электронные письма начинались с a
, а имя начиналось с b
. Вы можете выполнить эту проверку INDEXED для свойства name
для объекта PBOUser
или:
![enter image description here]()
Вот как вы можете оптимизировать свою базу данных:-)
Ответ 2
Используйте список индексов для добавления составных индексов для объекта. Компонентный индекс - это индекс, который охватывает несколько атрибутов или отношений. Компонентный индекс может ускорить поиск. Имена атрибутов и отношений в вашей модели данных являются наиболее распространенными индексами. Вы должны использовать хранилище SQLite для использования составных индексов.
Ответ 3
Добавление строки с единственным атрибутом в список Indexes
эквивалентно выбору Indexed
для этого атрибута: он создает индекс для атрибута для ускорения поиска в операторах запросов.
Список Indexes
предназначен для составных индексов. Компонентные индексы полезны, когда вы знаете, что будете искать значения этих атрибутов, объединенные в предложение WHERE
запроса:
SELECT * FROM customer WHERE surname = "Doe" AND firstname = "Joe";
Этот оператор может использовать составной индекс surname, firstname
. Этот индекс также будет полезен, если вы просто выполните поиск surname
, но не, если вы ищете только firstname
. Подумайте об индексе, как о телефонной книге: сначала он сортируется по фамилии, а затем по имени. Поэтому порядок атрибутов важен.