Как улучшить запросы с помощью индексации MongoDB

Kak Ulucsit Zaprosy S Pomos U Indeksacii Mongodb



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

Создать коллекцию

Прежде чем использовать индексы, нам необходимо создать новую коллекцию в нашей MongoDB. Мы уже создали один и вставили 10 документов с именем «Пустышка». Функция find() MongoDB отображает все записи из коллекции «Dummy» на экране оболочки MongoDB ниже.

тест> db.Dummy.find()







Выберите тип индексирования

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



Пример 01: Индекс одного поля

Вероятно, это самый фундаментальный тип индекса, который индексирует один столбец для повышения скорости запросов по этому столбцу. Этот тип индекса используется для запросов, в которых вы используете одно ключевое поле для запроса записей коллекции. Предположим, что вы используете поле «тип» для запроса записей коллекции «Dummy» в функции поиска, как показано ниже. Эта команда просматривает всю коллекцию, а обработка огромных коллекций может занять много времени. Следовательно, нам необходимо оптимизировать производительность этого запроса.



test> db.Dummy.find({тип: 'эмп' })





Записи из приведенной выше коллекции Dummy были найдены с использованием поля «тип», т. е. содержащего условие. Следовательно, здесь можно использовать одноключевой индекс для оптимизации поискового запроса. Итак, мы будем использовать функцию createIndex() MongoDB для создания индекса в поле «тип» коллекции «Dummy». На иллюстрации использования этого запроса показано успешное создание в оболочке одноключевого индекса с именем «type_1».

test> db.Dummy.createIndex({ тип: 1 })

Давайте воспользуемся запросом find(), как только он будет использовать поле «тип». Теперь эта операция будет значительно быстрее, чем использовавшаяся ранее функция find(), поскольку индекс существует, поскольку MongoDB может использовать индекс для быстрого получения записей с запрошенной должностью.



test> db.Dummy.find({тип: 'эмп' })

Пример 02: Сложный индекс

В определенных обстоятельствах нам может потребоваться искать предметы по различным критериям. Реализация составного индекса для этих полей может помочь повысить производительность запросов. Допустим, на этот раз вы хотите выполнить поиск в коллекции «Dummy», используя несколько полей, содержащих разные условия поиска при отображении запроса. Этот запрос искал записи из коллекции, где в поле «type» установлено значение «emp», а поле «sal» больше 350.

Логический оператор $gte использовался для применения условия к полю «sal». Всего после поиска по всей коллекции, состоящей из 10 записей, было возвращено две записи.

test> db.Dummy.find({тип: 'эмп' , Сал: {$gte: 350 } })

Давайте создадим составной индекс для вышеупомянутого запроса. Этот составной индекс имеет поля «type» и «sal». Числа «1» и «-1» обозначают порядок возрастания и убывания соответственно для полей «type» и «sal». Последовательность столбцов составного индекса важна и должна соответствовать шаблонам запросов. MongoDB присвоила этому составному индексу имя «type_1_sal_-1», как показано на рисунке.

test> db.Dummy.createIndex({ тип: 1 , воля:- 1 })

После использования того же запроса find() для поиска записей со значением поля «type» как «emp» и значением поля «sal», превышающим 350, мы получили тот же результат с небольшим изменением порядка. по сравнению с результатом предыдущего запроса. Запись с большим значением для поля «sal» теперь находится на первом месте, а наименьшее — на самом низком в соответствии с «-1», установленным для поля «sal» в составном индексе выше.

test> db.Dummy.find({тип: 'эмп' , Сал: {$gte: 350 } })

Пример 03: Текстовый указатель

Иногда вы можете столкнуться с ситуацией, когда вам придется иметь дело с большим набором данных, например, с большими описаниями продуктов, ингредиентов и т. д. Текстовый указатель может быть полезен для полнотекстового поиска в большом текстовом поле. Например, мы создали новую коллекцию под названием «Тест» в нашей тестовой базе данных. В эту коллекцию вставлено всего 6 записей с помощью функции InsertMany() в соответствии с запросом find() ниже.

test> db.Test.insertMany([

{имя: 'Ана' , принадлежащий: «Она живет в Лондоне и является хорошим учителем» },

{имя: 'Роберт' , принадлежащий: «Он такой потрясающий футболист» },

{имя: 'от' , принадлежащий: «Может быть, путешествую по Дубаю» },

{имя: «Джейкоб» , принадлежащий: «Он потрясающий и богатый». },

{имя: 'Киллиан' , принадлежащий: «Суперстарт фильма только что обрел известность в считанные секунды» },

{имя: 'Кен' , принадлежащий: «Любитель еды. Она тоже может тебя съесть». }

])

Теперь мы создадим текстовый индекс в поле «Des» этой коллекции, используя функцию createIndex() MongoDB. Ключевое слово «текст» в значении поля отображает тип индекса, который является «текстовым». Имя индекса des_text было создано автоматически.

test> db.Test.createIndex({ des: 'текст' })

Теперь функция find() используется для выполнения «текстового поиска» в коллекции по индексу «des_text». Оператор $search использовался для поиска слова «еда» в записях коллекции и отображения этой конкретной записи.

test> db.Test.find({ $text: { $search: 'еда' }});

Проверьте индексы:

Вы можете проверить и перечислить все примененные индексы различных коллекций в вашей MongoDB. Для этого используйте метод getIndexes() вместе с именем коллекции на экране оболочки MongoDB. Мы использовали эту команду отдельно для коллекций «Test» и «Dummy». На вашем экране отображается вся необходимая информация о встроенных и пользовательских индексах.

тест> db.Test.getIndexes()

тест> db.Dummy.getIndexes()

Индексы падения:

Пришло время удалить индексы, которые ранее были созданы для коллекции с помощью функции dropIndex() вместе с тем же именем поля, к которому был применен индекс. Приведенный ниже запрос показывает, что единственный индекс был удален.

test> db.Dummy.dropIndex({тип: 1 })

Таким же образом можно отбросить составной индекс.

test> db.Dummy.drop index({type: 1 , воля: 1 })

Заключение

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