Индексированные свойства в области
Я заметил, что Realm поддерживает индексированные свойства. Но не все системы баз данных поддерживают это (или это делается по умолчанию без явного объявления).
Пожалуйста, объясните, почему это необходимо, и чем отличается использование первичных ключей. И то, и другое позволяет ускорить запросы. Но тогда почему бы просто не использовать только первичные ключи?
Понятно, что есть возможность индексировать несколько свойств, но зачем это делать? То есть я не представляю реальных проблем, где никакое использование индексации не может сделать (или, возможно, но это было бы отвратительно с точки зрения программирования). Приведите пару примеров задач, которые просто объясняют преимущества индексации: как это происходит без индексации и с индексацией. Чтобы результат был очевиден "на лицо".
Я использую Swift.
Извините за мой английский ٩(◕‿◕)۶
2 ответа
Я думаю, что большинству других систем баз данных требуется явное объявление, так же как и Realm.
(например, MySQL CREATE TABLE test(id int, no int, INDEX(id,no));
или же CREATE INDEX id_index ON test(id); ALTER TABLE test ADD INDEX id_index(id);
SQLite CREATE INDEX nameindex ON user(name);
)
Поскольку индексы являются компромиссом между пространством и временем, вы жертвуете некоторым дополнительным дисковым пространством и небольшой загрузкой ЦП для каждого INSERT
, UPDATE
, а также DELETE
запрос, чтобы сделать большинство (если не все) ваши запросы гораздо быстрее.
В большинстве систем баз данных создание индексов требует явного объявления. Выбор столбцов для создания индексов является обязанностью программиста.
Царство тоже то же самое. Индексирование свойства значительно ускорит запросы, где свойство сравнивается на равенство (т.е. =
а также IN
операторы), за счет более медленных вставок.
https://realm.io/docs/swift/latest/
В большинстве мобильных приложений, поскольку поиск выполняется чаще, чем обновления, индексы в большинстве случаев работают хорошо.
Объясните, пожалуйста, зачем это нужно и чем отличается использование первичных ключей. >И то, и другое позволяет ускорить запросы. Но тогда почему бы просто не использовать только первичные ключи?
Первичный ключ — это индекс, который уникален и не может быть нулевым. Используйте индексы для свойств, которые будут доступны для поиска. Это ускорит запросы.