Оптимизация поиска и сортировки основных данных
Как видно из заголовка, индексирование должно ускорить поиск и сортировку вашей базы данных.Однако замедляет сохранение изменений в постоянном хранилище.Это имеет значение, когда вы используете NSPredicate
и NSSortDescriptor
объекты в вашем запросе.
Допустим, у вас есть две сущности: PBOUser
и PBOLocation
(много ко многим) .Вы можете увидеть его свойства на изображении ниже:
Предположим, что в базе данных есть 10 000 пользователей и 50 000 местоположений.Теперь нам нужно найти каждого пользователя с адресом электронной почты, начинающимся с a
.Если мы предоставляем такой запрос без индексации, Базовые данные должны проверять каждую запись (в основном 10 000) .
Но что, если он проиндексирован (другими словами, отсортирован по email по убыванию) ?-> Затем Core Data проверяет только те записи, которые начинаются с a
.Если базовые данные достигают b
, поиск прекращается, поскольку очевидно, что больше нет записей, чья электронная почта начинается с a
, поскольку она проиндексирована.
Как включить индексацию для модели базовых данных изв Xcode:
или:
Надеемся, что они эквивалентны: -)
Но что если вы хотите: письма начинаются с a
, а имя начинается с b
Вы можете сделать это, проверяя INDEXED для name
свойства для PBOUser
сущности, или:
Вот как вы можете оптимизировать свою базу данных :-)