Индексы очень важны в любой базе данных, и MongoDB ничем не отличается. Благодаря использованию индексов выполнение запросов в MongoDB становится более эффективным.
Если у вас есть коллекция с тысячами документов без индексов, а затем вы запрашиваете, чтобы найти определенные документы, тогда в таком случае MongoDB потребуется сканировать всю коллекцию, чтобы найти документы. Но если бы у вас были индексы, MongoDB использовала бы эти индексы, чтобы ограничить количество документов, которые нужно было искать в коллекции.
Индексы - это специальные наборы данных, в которых хранится часть данных коллекции. Поскольку данные являются частичными, их становится легче читать. Этот частичный набор хранит значение определенного поля или набор полей, упорядоченных по значению поля.
В этом руководстве вы узнаете -
- Понимание влияния индексов
- Как создавать индексы: createIndex ()
- Как найти индексы: getindexes ()
- Как удалить индексы: dropindex ()
Понимание влияния индексов
Теперь, хотя из введения мы увидели, что индексы хороши для запросов, слишком много индексов может замедлить другие операции, такие как операции Insert, Delete и Update.
Если с документами выполняются частые операции вставки, удаления и обновления, то индексы нужно будет менять так часто, что будет лишь накладными расходами для коллекции.
В приведенном ниже примере показан пример того, какие значения полей могут составлять индекс в коллекции. Индекс может быть основан только на одном поле в коллекции или на нескольких полях в коллекции.
В приведенном ниже примере Employeeid «1» и EmployeeCode «AA» используются для индексации документов в коллекции. Поэтому, когда выполняется поиск по запросу, эти индексы будут использоваться для быстрого и эффективного поиска необходимых документов в коллекции.
Таким образом, даже если поисковый запрос основан на коде EmployeeCode «AA», этот документ будет возвращен.
Как создавать индексы: createIndex ()
Создание индекса в MongoDB выполняется с помощью метода createIndex .
В следующем примере показано, как добавить index в collection. Предположим, что у нас есть та же коллекция сотрудников, у которой есть имена полей «Employeeid» и «EmployeeName».
db.Employee.createIndex({Employeeid:1})
Пояснение к коду:
- Метод createIndex используется для создания индекса на основе «Employeeid» документа.
- Параметр «1» указывает, что когда индекс создается со значениями поля «Employeeid», они должны быть отсортированы в порядке возрастания. Обратите внимание, что это отличается от поля _id (поле id используется для уникальной идентификации каждого документа в коллекции), которое автоматически создается в коллекции MongoDB. Теперь документы будут отсортированы по Employeeid, а не по полю _id.
Если команда выполнена успешно, будет показан следующий результат:
Выход:
- NumIndexesBefore: 1 указывает количество значений поля (фактических полей в коллекции), которые были в индексах до выполнения команды. Помните, что каждая коллекция имеет поле _id, которое также считается значением поля для индекса. Поскольку поле индекса _id при первоначальном создании является частью коллекции, значение numIndexesBefore равно 1.
- NumIndexesAfter: 2 указывает количество значений поля, которые были в индексах после выполнения команды.
- Здесь вывод «ok: 1» указывает, что операция прошла успешно, и новый индекс добавляется в коллекцию.
В приведенном выше коде показано, как создать индекс на основе одного значения поля, но можно также создать индекс на основе нескольких значений поля.
В следующем примере показано, как это можно сделать;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Пояснение к коду:
- Метод createIndex теперь принимает во внимание несколько значений поля, что теперь приведет к созданию индекса на основе «Employeeid» и «EmployeeName». Employeeid: 1 и EmployeeName: 1 указывает, что индекс должен быть создан для этих двух значений поля с: 1, указывающим, что он должен быть в порядке возрастания.
Как найти индексы: getindexes ()
Поиск индекса в MongoDB выполняется с помощью метода getIndexes .
В следующем примере показано, как это можно сделать;
db.Employee.getIndexes()
Пояснение к коду:
- Метод getIndexes используется для поиска всех индексов в коллекции.
Если команда выполнена успешно, будет показан следующий результат:
Выход:
- Выходные данные возвращают документ, который просто показывает, что в коллекции есть 2 индекса, которые являются полем _id, а другой - полем идентификатора сотрудника. Знак: 1 указывает, что значения полей в индексе создаются в порядке возрастания.
Как удалить индексы: dropindex ()
Удаление индекса в MongoDB выполняется с помощью метода dropIndex.
В следующем примере показано, как это можно сделать;
db.Employee.dropIndex(Employeeid:1)
Пояснение к коду:
- Метод dropIndex принимает необходимые значения поля, которые необходимо удалить из индекса.
Если команда выполнена успешно, будет показан следующий результат:
Выход:
- NIndexesWas: 3 указывает количество значений поля, которые были в индексах до выполнения команды. Помните, что каждая коллекция имеет поле _id, которое также считается значением поля для индекса.
- Вывод ok: 1 указывает, что операция прошла успешно, а поле «Employeeid» удаляется из индекса.
Чтобы удалить сразу все индексы в коллекции, можно использовать команду dropIndexes.
В следующем примере показано, как это можно сделать.
db.Employee.dropIndex()
Пояснение к коду:
- Метод dropIndexes удалит все индексы, кроме индекса _id.
Если команда выполнена успешно, будет показан следующий результат:
Выход:
- NIndexesWas: 2 указывает количество значений поля, которые были в индексах до выполнения команды.
- Еще раз помните, что каждая коллекция имеет поле _id, которое также считается значением поля в индексе и не будет удалено MongoDB, и это то, что указывает это сообщение.
- Вывод ok: 1 указывает, что операция прошла успешно.
Резюме
- Определение индексов важно для более быстрого и эффективного поиска документов в коллекции.
- Индексы можно создавать с помощью метода createIndex. Индексы могут быть созданы только для одного поля или нескольких значений полей.
- Индексы можно найти с помощью метода getIndexes.
- Индексы можно удалить, используя dropIndex для отдельных индексов или dropIndexes для удаления всех индексов.