Правильное индексирование — это основа оптимизации запросов в MongoDB. Я создаю индексы, которые соответствуют наиболее частым паттернам запросов, включая составные индексы, следующие правилу ESR (Equality, Sort, Range). Я также использую покрытые запросы, убеждаясь, что все необходимые поля включены в индекс, что позволяет MongoDB решать запросы без сканирования документов.
/term/), которые не могут эффективно использовать индексы$in вместо множества отдельных запросов$where и операторов на основе JavaScript, которые обходят индексированиеОсновной инструмент для диагностики медленных запросов — метод explain():
db.collection.find(query).explain("executionStats")
Ключевые показатели для проверки:
COLLSCAN — сигнализирует об отсутствующем или неиспользуемом индексеnReturned vs totalDocsExamined — большой разрыв означает плохую селективность индексаexecutionTimeMillis — выделяет медленные операцииЯ также включаю профилировщик базы данных на уровне 1 или 2, чтобы автоматически захватывать медленные запросы:
db.setProfilingLevel(1, { slowms: 100 })
При использовании агрегаций я размещаю этапы $match и $sort как можно раньше, чтобы уменьшить количество документов, обрабатываемых на последующих этапах, и использую $project для удаления ненужных полей в начале пайплайна.
Для больших наборов данных я оцениваю шардирование с хорошо выбранным ключом шарда, чтобы равномерно распределить нагрузку и избежать горячих точек. Я также использую read preferences, чтобы перенести нагрузку на чтение на вторичные реплики, где это позволяет консистентность.
Правило ESR для составных индексов указывает, что поля должны быть упорядочены как Equality, Sort, затем Range, чтобы оптимизировать производительность запросов и использование индекса.
Новый — ещё не проверен сообществом
Вы