22.4.3.6 Создание и удаление индексов
Индексы используются для быстрого поиска документов со значениями определённых полей. Без индекса MySQL должен начинать с первого документа и затем читать всю коллекцию, чтобы найти соответствующие поля. Чем больше коллекция, тем больше это стоит. Если коллекция большая, и запросы к определённому полю часты, то стоит рассмотреть создание индекса по конкретному полю внутри документа.
Например, следующий запрос выполняется быстрее с индексом по полю Population:
mysql-py> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
Метод create_index() создаёт индекс, который можно определить с помощью JSON документа, указывающего, какие поля использовать. Этот раздел — общий обзор индексирования. Для получения дополнительной информации см. .
Добавление не уникального индекса
Для создания не уникального индекса передайте имя индекса и информацию об индексе методу create_index(). Дублирование имён индексов запрещено.
Следующий пример определяет индекс с именем popul, определённый по полю Population объекта demographics, индексируемому как числовое значение Integer. Последний параметр указывает, нужно ли полю требовать ограничение NOT
NULL. Если значение false, то поле может содержать значения NULL. Информация об индексе — это JSON документ с деталями одного или нескольких полей для включения в индекс. Каждое определение поля должно включать полный путь к полю в документе и указать тип поля.
mysql-py> db.countryinfo.createIndex("popul", {fields:
[{field: '$.demographics.Population', type: 'INTEGER'}]})
Здесь индекс создаётся с использованием целочисленного числового значения. Доступны дополнительные параметры, включая параметры для использования с данными GeoJSON. Также можно указать тип индекса, который здесь опущен, потому что тип по умолчанию “index” подходит.
Добавление уникального индекса
Для создания уникального индекса передайте имя индекса, определение индекса и тип индекса “unique” методу create_index(). Этот пример демонстрирует уникальный индекс, созданный по имени страны ("Name"), что является ещё одним распространённым полем в коллекции countryinfo для индексирования. В описании поля индекса "TEXT(40)" представляет количество символов для индексирования, а "required": True указывает, что поле должно существовать в документе.
mysql-py> db.countryinfo.create_index("name",
{"fields": [{"field": "$.Name", "type": "TEXT(40)", "required": True}], "unique": True})
Удаление индекса
Для удаления индекса передайте имя индекса, который нужно удалить, методу drop_index(). Например, можно удалить индекс “popul” следующим образом:
mysql-py> db.countryinfo.drop_index("popul")
Связанная информация
См. для получения дополнительной информации.
См. для получения дополнительной информации о JSON документе, определяющем индекс.
См. для полного определения синтаксиса.
© 2025 Oracle
Licensed under the GPLv2 License.