MongoDB Индексирование: createIndex() и dropIndex()

⚡ Умное резюме

MongoDB Индексы хранят упорядоченное подмножество полей коллекции, позволяя запросам находить документы без сканирования каждой записи. Методы createIndex, getIndexes и dropIndex создают, перечисляют и удаляют эти критически важные для производительности структуры.

  • 🚀 Цель: Индексы позволяют MongoDB Для более быстрого считывания данных можно пропустить полное сканирование коллекции.
  • 🇧🇷 createIndex: Создает однопольные или составные индексы в порядке возрастания или убывания.
  • 🔍 getIndexes: Выводит список всех индексов в коллекции, включая индекс по умолчанию _id.
  • 🇧🇷 dropIndex: Удаляет один индекс; dropIndexes очищает все индексы, кроме _id.
  • Компромисс: Слишком большое количество индексов замедляет операции вставки, обновления и удаления.
  • 🤖 Настройка ИИ: Помощники автоматически рекомендуют и генерируют необходимые индексы.

MongoDB Индексирование createIndex dropIndex

Каковы MongoDB Индексы?

Индексы очень важны в любой базе данных, и с MongoDB Это ничем не отличается. Использование индексов позволяет выполнять запросы в MongoDB становится более эффективным.

Если у вас есть коллекция из тысяч документов без индексов, и вы затем выполняете запрос для поиска определенных документов, то в таком случае MongoDB нужно будет отсканировать всю коллекцию, чтобы найти документы. Но если бы у вас были индексы, MongoDB будет использовать эти индексы, чтобы ограничить количество документов, которые нужно искать в коллекции.

Индексы — это специальные наборы данных, которые хранят часть данных коллекции. Поскольку данные являются частичными, их легче читать. Этот частичный набор хранит значение определенного поля или набора полей, упорядоченных по значению поля.

Понимание влияния индексов

Несмотря на то, что во введении было показано, что индексы полезны для выполнения запросов, слишком большое количество индексов может замедлить другие операции, такие как вставка, удаление и обновление данных.

Если часто выполняются операции вставки, удаления и обновления документов, то индексы должны будут так же часто меняться, что создаст дополнительную нагрузку на сборщик данных.

Приведенный ниже пример показывает, какие значения полей могут составлять индекс в коллекции. Индекс может основываться либо только на одном поле в коллекции, либо на нескольких полях в коллекции.

В приведенном ниже примере идентификатор сотрудника «1» и сотрудникCode Индексы «AA» используются для индексирования документов в коллекции. Таким образом, при выполнении поискового запроса эти индексы будут использоваться для быстрого и эффективного поиска необходимых документов в коллекции.

Таким образом, даже если поисковый запрос основан на данных сотрудника.Code «AA», этот документ будет возвращен.

Понимание влияния индексов

Как создавать индексы: createIndex()

Создание индекса в MongoDB делается с помощью создатьиндекс метод.

Следующий пример показывает, как добавить индекс к коллекции. Предположим, у нас есть та же коллекция Employee, содержащая поля с именами «Employeeid» и «EmployeeName».

Создание индексов с помощью createIndex

db.Employee.createIndex({Employeeid:1})

Code Объяснение:

  1. создатьиндекс Метод используется для создания индекса на основе «Employeeid» документа.
  2. Параметр «1» указывает, что при создании индекса со значениями поля «Employeeid» они должны быть отсортированы в порядке возрастания. Обратите внимание, что это отличается от поля _id (которое однозначно идентифицирует каждый документ), которое MongoDB Создается автоматически. Теперь документы будут сортироваться по идентификатору сотрудника (Employeeid), а не по полю _id.

Если команда будет выполнена успешно, будет показан следующий результат:

Выход:

вывод createIndex

  1. Значение numIndexesBefore: 1 указывает количество значений полей в индексах до выполнения команды. Каждая коллекция имеет поле _id, которое также считается значением поля, поэтому numIndexesBefore равно 1.
  2. Параметр numIndexesAfter: 2 указывает количество значений полей в индексах после выполнения команды.
  3. Вывод «ok: 1» указывает на успешное выполнение операции и добавление нового индекса в коллекцию.

Приведённый выше код показывает, как создать индекс на основе одного значения поля, но можно также создать индекс на основе нескольких значений полей. Следующий пример демонстрирует, как это можно сделать:

Создание составного индекса по нескольким полям

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

Метод createIndex теперь учитывает несколько значений полей, что приведет к созданию индекса на основе полей «Employeeid» и «EmployeeName». Значения Employeeid:1 и EmployeeName:1 указывают на то, что индекс должен быть создан на основе этих двух значений полей, при этом :1 обозначает возрастающий порядок. Это называется составным индексом.

Как найти индексы: getIndexes()

Поиск указателя в MongoDB делается с помощью getIndexes метод. Следующий пример показывает, как это можно сделать:

Найти индексы с помощью getIndexes

db.Employee.getIndexes()

Метод getIndexes используется для поиска всех индексов в коллекции.

Если команда будет выполнена успешно, будет показан следующий результат:

Выход:

вывод getIndexes

В результате выполнения программы отображается документ, в котором показано наличие двух индексов в коллекции: поля _id и поля Employeeid. :1 указывает на то, что значения полей в индексе создаются в порядке возрастания.

Как удалить индексы: dropIndex()

Удаление индекса в MongoDB делается с помощью dropIndex метод. Следующий пример показывает, как это можно сделать:

Удаление индексов с помощью dropIndex

db.Employee.dropIndex({Employeeid:1})

Метод dropIndex принимает необходимые значения полей, которые нужно удалить из индекса.

Если команда будет выполнена успешно, будет показан следующий результат:

Выход:

вывод dropIndex

  1. Значение nIndexesWas: 3 указывает количество значений полей в индексах до выполнения команды. Каждая коллекция содержит поле _id, которое также считается значением поля.
  2. Вывод ok:1 указывает, что операция прошла успешно, а поле «Employeeid» удалено из индекса.

Чтобы удалить все индексы из коллекции сразу, можно использовать команду dropIndexes. Следующий пример показывает, как это можно сделать:

Удалите все индексы с помощью команды dropIndexes

db.Employee.dropIndexes()

Метод dropIndexes удалит все индексы, кроме индекса _id.

Если команда будет выполнена успешно, будет показан следующий результат:

Выход:

dropIndexes output

  1. Значение nIndexesWas: 2 указывает количество значений полей в индексах до выполнения команды.
  2. Каждая коллекция имеет поле _id, которое также считается значением поля и не будет удалено. MongoDBИменно это и указывает данное сообщение.
  3. Выходные данные ok: 1 указывают, что операция прошла успешно.

Часто задаваемые вопросы (FAQ)

Однопольный индекс сортирует только одно поле и подходит для запросов, фильтрующих только по этому полю. Составной индекс охватывает несколько полей в одной структуре и подходит для запросов, которые фильтруют или сортируют по этим полям одновременно. Составные индексы поддерживают до 32 полей.

Поле _id — это MongoDBЭто первичный ключ, поэтому каждая коллекция автоматически получает уникальный индекс _id. Его нельзя удалить. Именно поэтому numIndexesBefore начинается с 1 еще до добавления какого-либо пользовательского индекса.

Выполните запрос с помощью `.explain(“executionStats”)`. В выигрышном плане этап `IXSCAN` означает использование индекса, а `COLLSCAN` — использование индекса. MongoDB Я просканировал все документы, и новый указатель может помочь.

Используйте этап агрегации $indexStats, чтобы увидеть, как часто обращаются к каждому индексу. Индексы с очень низким уровнем использования занимают дисковое пространство и приводят к медленной записи, поэтому удаляйте их с помощью команды dropIndex, чтобы оптимизировать сборку данных.

Инструменты искусственного интеллекта анализируют журналы медленных запросов и предлагают, какие поля следует проиндексировать. MongoDB's Performance Advisor ранжирует рекомендации по индексам по влиянию и помогаетping Вы добавляете индексы с высокой ценностью и пропускаете избыточные.

Да. Помощники AI Copilot преобразуют простые запросы на английском языке в правильный синтаксис createIndex, включая восходящие или нисходящие ключи и порядок составных полей, а затем объясняют результирующий индекс.

ESR расшифровывается как Равенство, Сортировка, Диапазон. При создании составного индекса сначала размещайте поля, соответствующие условию равенства, затем поля, соответствующие условию сортировки, а затем фильтры диапазона. Такой порядок позволяет MongoDB Используйте указатель наиболее эффективно.

Ответ на покрытый запрос полностью поступает из индекса, без чтения документов. Когда каждое поле в фильтре и проекции находится в одном индексе, MongoDB Отображает результаты быстрее.

Подведем итог этой публикации следующим образом: