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 връща резултати по-бързо.

Обобщете тази публикация с: