MongoDB Індексування: createIndex() та dropIndex()

⚡ Розумний підсумок

MongoDB Індекси зберігають упорядковану підмножину полів колекції, тому запити можуть знаходити документи без сканування кожного запису. Методи createIndex, getIndexes та dropIndex створюють, перераховують та видаляють ці критично важливі для продуктивності структури.

  • ???? Мета: Індекси нехай MongoDB пропускати повне сканування колекції для швидшого читання.
  • 🛠️ createIndex: Створює однополеві або складені індекси у порядку зростання або спадання.
  • 🔍 getIndexes: Перелічує всі індекси в колекції, включаючи _id за замовчуванням.
  • 🗑️ dropIndex: Видаляє один індекс; dropIndexes очищає всі, крім _id.
  • 🇧🇷 Компроміс: Занадто багато індексів уповільнюють вставку, оновлення та видалення.
  • 🤖 Налаштування ШІ: Помічники рекомендують та автоматично генерують правильні індекси.

MongoDB Індексування createIndex dropIndex

Які MongoDB Індекси?

Індекси дуже важливі в будь-якій базі даних, а також MongoDB нічим не відрізняється. За допомогою індексів виконання запитів у MongoDB стає більш ефективним.

Якщо у вас є колекція з тисячами документів без індексів, а потім ви здійснюєте запит, щоб знайти певні документи, то в такому випадку MongoDB потрібно просканувати всю колекцію, щоб знайти документи. Але якщо у вас були індекси, MongoDB використовуватимуть ці покажчики, щоб обмежити кількість документів, які необхідно шукати в колекції.

Індекси – це спеціальні набори даних, які зберігають частину даних колекції. Оскільки дані є частковими, їх легше читати. Цей частковий набір зберігає значення певного поля або набору полів, упорядкованих за значенням поля.

Розуміння впливу індексів

Хоча у вступі було показано, що індекси корисні для запитів, надмірна кількість індексів може уповільнити інші операції, такі як операції вставки, видалення та оновлення.

Якщо над документами часто виконуються операції вставки, видалення та оновлення, то індекси повинні змінюватися так часто, що лише призведе до додаткових витрат на колекцію.

У наведеному нижче прикладі показано, які значення полів можуть складати індекс у колекції. Індекс може базуватися або лише на одному полі в колекції, або на кількох полях у колекції.

У наведеному нижче прикладі Employeeid «1» та EmployeeCode «AA» використовуються для індексації документів у колекції. Тож, коли виконується пошук за запитом, ці індекси будуть використані для швидкого та ефективного пошуку потрібних документів у колекції.

Тож навіть якщо пошуковий запит базується на співробітникуCode «АА», цей документ буде повернуто.

Розуміння впливу індексів

Як створити індекси: createIndex()

Створення індексу в MongoDB здійснюється за допомогою createIndex метод.

У наступному прикладі показано, як додати індекс до колекції. Припустимо, що у нас є та сама колекція Employee, яка має імена полів «Employeeid» та «EmployeeName».

Створення індексів за допомогою createIndex

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

Code Пояснення:

  1. Команда createIndex Метод використовується для створення індексу на основі «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

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

Поширені запитання

Однополевий індекс сортує одне поле та підходить для запитів, що фільтрують лише це поле. Складений індекс охоплює кілька полів в одній структурі та підходить для запитів, що фільтрують або сортують ці поля разом. Складені індекси підтримують до 32 полів.

Поле _id це MongoDBпервинний ключ , тому кожна колекція автоматично отримує унікальний індекс _id. Його не можна видалити. Саме тому numIndexesBefore починається з 1 ще до додавання будь-якого власного індексу.

Виконайте запит з .explain(“executionStats”). У переможному плані етап IXSCAN означає, що було використано індекс, тоді як COLLSCAN означає MongoDB перевірив кожен документ, і новий індекс може допомогти.

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

Інструменти штучного інтелекту аналізують журнали повільних запитів і пропонують, які поля індексувати. MongoDBКонсультант з ефективності ранжує рекомендації індексу за впливом, helping ви додаєте високоцінні індекси та пропускаєте зайві.

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

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

На покритий запит відповідь повністю отримується з індексу, без читання документів. Коли кожне поле у ​​фільтрі та проекції знаходиться в одному індексі, MongoDB швидше повертає результати.

Підсумуйте цей пост за допомогою: