Почему индексы
Поймите два ключевых момента.
- Хотя индекс лучше, чем отсутствие индекса, правильный индекс намного лучше любого другого.
- MongoDB будет использовать только один индекс для каждого запроса, создавая составные индексы с правильным порядком полей, который вы, вероятно, захотите использовать.
Индексы не бесплатны. Они забирают память и снижают производительность при вставке, обновлении и удалении. Обычно снижение производительности незначительно (особенно по сравнению с увеличением производительности чтения), но это не означает, что мы не можем грамотно создавать индексы.
Как индексы
Определение того, какую группу полей следует проиндексировать вместе, связано с пониманием выполняемых вами запросов. Порядок полей, используемых для создания индекса, имеет решающее значение. Хорошая новость заключается в том, что, если вы сделаете неправильный порядок, индекс вообще не будет использоваться, поэтому его будет легко обнаружить с помощью объяснения.
Почему Сортировка
Вашим запросам может потребоваться сортировка. Но сортировка может быть дорогостоящей операцией, поэтому важно относиться к полям, по которым вы сортируете, как к полю, к которому вы запрашиваете. Так будет быстрее, если у него будет index. Однако есть одно важное отличие: поле, которое вы сортируете, должно быть последним полем в вашем индексе. Единственным исключением из этого правила является то, что если поле также является частью вашего запроса, то правило must-be-last не применяется.
Как Сортировка
Вы можете указать сортировку по всем ключам индекса или по подмножеству; однако ключи сортировки должны быть перечислены в том же порядке, в каком они появляются в указателе. Например, шаблон ключа индекса {a: 1, b: 1} может поддерживать сортировку по {a: 1, b: 1}, но не по {b: 1, a: 1}.
Сортировка должна указывать то же направление сортировки (т. Е. По возрастанию / убыванию) для всех своих ключей, что и шаблон индексного ключа, или указывать обратное направление сортировки для всех своих ключей в качестве шаблона индексного ключа. Например, шаблон ключа индекса {a: 1, b: 1} может поддерживать сортировку по {a: 1, b: 1} и {a: -1, b: -1}, но не по {a: -1 , б: 1}.
Допустим, есть такие индексы:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?