Подтвердить что ты не робот

MongoDB: порядок индексов и порядок запросов должны совпадать?

Этот вопрос касается внутреннего метода управления индексами и обработки Bson Documents.

При создании нескольких индексов типа "index1", "index2", "index3"... индекс хранится для использования во время запросов, но как насчет порядка запросов и производительности.

Пример
index1, index2, index3 ---- > запрос в том же порядке index1, index2, index3 (лучший случай) index1, index2, index3 ---- > запрос в другом порядке index2, index1, index3 (измененный порядок)

Много раз вы используете вложенные запросы, включая эти 3 индекса и другие элементы или больше индексов. Порядок запросов будет означать потерянное время?. Должны ли передавать запросы, касающиеся определенного порядка индексов или внутренней архитектуры, заботиться об этом поиске заказа? Я ищу, чтобы знать, действительно ли я позабочусь об этом или могу выполнить свои запросы в режиме manier свободы.

Спасибо.

4b9b3361

Ответ 1

Порядок условий в вашем запросе не влияет на то, может ли он использовать индекс или нет.

например. типичная структура документа:

{
    "FieldA" : "A",
    "FieldB" : "B"
}

Если у вас есть составной индекс для A и B:

db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})

Затем оба этих запроса смогут использовать этот индекс:

db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})

Таким образом, порядок условий в запросе не мешает использованию индекса - о котором я думаю, это вопрос, который вы задаете.

Вы можете легко проверить это, попробовав 2 запроса в оболочке и добавив .explain() после поиска. Я просто сделал это, чтобы подтвердить, и оба они показали, что используется составной индекс.

однако, если вы запустите следующий запрос, это НЕ будет использовать индекс, так как FieldA не запрашивается:

db.MyCollection.find({FieldB : "B"})

Таким образом, это упорядочение полей в индексе, определяющее, может ли он использоваться запросом, а не упорядочение полей в самом запросе (об этом говорил Лукас).

Ответ 2

Из http://www.mongodb.org/display/DOCS/Indexes:

Если у вас есть составной индекс на несколько полей, вы можете использовать его для запроса в начале подмножества поля. Поэтому, если у вас есть индекс на

а, б, в

вы можете использовать запрос на

a

a, b

а, б, в

Итак, да, порядок имеет значение. Вы должны уточнить свой вопрос, если вам нужен более точный ответ.

Ответ 3

Да, как и индекс MySQL. Реализация индекса MongoDB совпадает с MySQL. Подробности вы можете увидеть http://en.wikipedia.org/wiki/B-tree.