Учебники

18) индексы Mongodb

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

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

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

В этом уроке вы узнаете –

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

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

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

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

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

Таким образом, даже если поисковый запрос основан на EmployeeCode “AA”, этот документ будет возвращен.

Учебное пособие по индексированию MongoDB - createIndex ()

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

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

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

Учебное пособие по индексированию MongoDB - createIndex ()

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

Объяснение кода:

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

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

Вывод:

Учебное пособие по индексированию MongoDB - createIndex ()

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

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

В следующем примере показано, как это можно сделать;

Учебное пособие по индексированию MongoDB - createIndex ()

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

Объяснение кода:

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

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

Поиск индекса в MongoDB осуществляется с помощью метода «getIndexes» .

В следующем примере показано, как это можно сделать;

Учебное пособие по индексированию MongoDB - createIndex ()

db.Employee.getIndexes()

Объяснение кода:

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

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

Вывод:

Учебное пособие по индексированию MongoDB - createIndex ()

  1. Выходные данные возвращают документ, который просто показывает, что в коллекции есть 2 индекса – поле _id, а другое – поле идентификатора сотрудника. Символ: 1 указывает, что значения полей в индексе создаются в порядке возрастания.

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

Удаление индекса в MongoDB выполняется с помощью метода dropIndex.

В следующем примере показано, как это можно сделать;

Учебное пособие по индексированию MongoDB - createIndex ()

db.Employee.dropIndex(Employeeid:1)

Объяснение кода:

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

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

Вывод:

Учебное пособие по индексированию MongoDB - createIndex ()

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

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

В следующем примере показано, как это можно сделать.

Учебное пособие по индексированию MongoDB - createIndex ()

db.Employee.dropIndex()

Объяснение кода:

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

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

Вывод:

Учебное пособие по индексированию MongoDB - createIndex ()

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

Резюме

  • Определение индексов важно для более быстрого и эффективного поиска документов в коллекции.
  • Индексы могут быть созданы с помощью метода createIndex. Индексы могут быть созданы только для одного поля или нескольких значений поля.
  • Индексы можно найти с помощью метода getIndexes.
  • Индексы могут быть удалены с помощью dropIndex для отдельных индексов или dropIndexes для удаления всех индексов.