Возьмите, например, find()
, который включает в себя поле a
и b
, в указанном порядке. Например,Какой индекс будет использоваться, если имеется несколько индексов, содержащих одни и те же поля?
db.collection.find({'a':{'$lt':10},'b':{'$lt':5}})
У меня есть два ключа в моем массиве индексов для коллекции:
[
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1
},
"ns" : "x.test",
"name" : "a_1_b_1"
},
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1,
"c" : 1
},
"ns" : "x.test",
"name" : "a_1_b_1_c_1"
}
]
Это гарантировано что Монго будет использовать первый ключ, так как он более точно соответствует запросу, или он случайно выбирает любой из двух ключей, потому что они оба будут работать?
может показать нам ваши индексы? – Zarathustra
Обновлен мой вопрос с фактическим массивом (не считалось, что это было необходимо раньше) – ujvl
Стоит отметить, что вы можете удалить свой первый индекс ('a_1_b_1'), поскольку он является надлежащим подмножеством второго индекса (такие же ключи и порядок) который может использоваться для удовлетворения тех же запросов. Дублирующие индексы - лишние накладные расходы. – Stennie