Ve skutečnosti to tak je, i když v tomto případě ne. Abyste skutečně viděli, co se děje, musíte se podívat na "podrobnou" formu vysvětlení přidáním true
:
db.t.find({item:"abc123",qty:{$gt:15}}).explain(true)
{
"cursor" : "BtreeCursor item_1",
"isMultiKey" : false,
"n" : 84,
"nscannedObjects" : 100,
"nscanned" : 100,
"nscannedObjectsAllPlans" : 201,
"nscannedAllPlans" : 304,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 2,
"nChunkSkips" : 0,
"millis" : 2,
"indexBounds" : {
"item" : [
[
"abc123",
"abc123"
]
]
},
"allPlans" : [
{
"cursor" : "BtreeCursor item_1",
"isMultiKey" : false,
"n" : 84,
"nscannedObjects" : 100,
"nscanned" : 100,
"scanAndOrder" : false,
"indexOnly" : false,
"nChunkSkips" : 0,
"indexBounds" : {
"item" : [
[
"abc123",
"abc123"
]
]
}
},
{
"cursor" : "BtreeCursor qty_1",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 101,
"nscanned" : 102,
"scanAndOrder" : false,
"indexOnly" : false,
"nChunkSkips" : 0,
"indexBounds" : {
"qty" : [
[
15,
Infinity
]
]
}
},
{
"cursor" : "Complex Plan",
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 102,
"nChunkSkips" : 0
}
],
Zkrátka, ale poslední část je to, co hledáte. Jak je vysvětleno v příručce, vzhled „Složitého plánu“ znamená, že se používá křižovatka.
{
"cursor" : "Complex Plan",
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 102,
"nChunkSkips" : 0
}
Jediným případem je, že zatímco je „prohlížen“, není v tomto případě optimalizátorem vybrán jako „nejoptimálnější“ dotaz. Optimalizátor tedy říká, že ve skutečnosti plán využívající pouze jeden vybraný index je ten, který bude dokončen nejcitlivěji.
Takže i když byl zvažován „průnik“, nebyl „nejvhodnější“ a byl zvolen jediný index.