Yah itu benar-benar meskipun tidak dalam kasus ini. Untuk benar-benar melihat apa yang terjadi, Anda perlu melihat bentuk penjelasan "verbose", dengan menambahkan 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
}
],
Potong pendek, tetapi bagian terakhir adalah apa yang Anda cari. Seperti yang dijelaskan dalam manual, tampilan "Rencana Kompleks" berarti persimpangan sedang digunakan.
{
"cursor" : "Complex Plan",
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 102,
"nChunkSkips" : 0
}
Satu-satunya kasus di sini adalah bahwa ketika sedang "dilihat" itu tidak dipilih oleh pengoptimal dalam hal ini sebagai kueri paling "optimal". Jadi, pengoptimal mengatakan bahwa sebenarnya rencana yang hanya menggunakan satu indeks yang dipilih, adalah yang akan selesai dengan cara yang paling responsif.
Jadi sementara "persimpangan" dipertimbangkan, itu bukan "yang paling cocok" dan indeks tunggal dipilih.