Versi Mongodb: v3.4
db.h.reateIndex({'port':1});
db.h.reateIndex({'geo.city':1});
Apabila menggunakan
db.h.find({'port':'80','geo.city':'Taipei'},{'port':1,'geo.city':1,'geo.country':1})
terangkan('executionStats')
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 280952,
"executionTimeMillis" : 10056,
"totalKeysExamined" : 879232,
"totalDocsExamined" : 879232,
"executionStages" : {
"stage" : "PROJECTION",
"nReturned" : 280952,
"executionTimeMillisEstimate" : 9763,
"works" : 879233,
"advanced" : 280952,
"needTime" : 598280,
"needYield" : 0,
"saveState" : 6915,
"restoreState" : 6915,
"isEOF" : 1,
"invalidates" : 0,
"transformBy" : {
"port" : 1,
"geo.city" : 1,
"geo.country" : 1,
},
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"geo.city" : {
"$eq" : "Taipei"
}
},
"nReturned" : 280952,
"executionTimeMillisEstimate" : 9246,
"works" : 879233,
"advanced" : 280952,
"needTime" : 598280,
"needYield" : 0,
"saveState" : 6915,
"restoreState" : 6915,
"isEOF" : 1,
"invalidates" : 0,
"docsExamined" : 879232,
"alreadyHasObj" : 0,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 879232,
"executionTimeMillisEstimate" : 466,
"works" : 879233,
"advanced" : 879232,
"needTime" : 0,
"needYield" : 0,
"saveState" : 6915,
"restoreState" : 6915,
"isEOF" : 1,
"invalidates" : 0,
"keyPattern" : {
"port" : 1
},
"indexName" : "port_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"port" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"port" : [
"[\"80\", \"80\"]"
]
},
"keysExamined" : 879232,
"seeks" : 1,
"dupsTested" : 0,
"dupsDropped" : 0,
"seenInvalidated" : 0
}
}
}
Seperti contoh di atas, kecuali port menggunakan indeks? Atau adakah kedua-duanya digunakan? Jika kedua-duanya digunakan, adakah kita masih perlu mencipta indeks komposit?
Terima kasih
Jawab sendiri, indeks digunakan di atas, tetapi hanya sebahagian daripadanya.
Jika anda mencipta indeks komposit, ia akan dicari dengan lebih pantas.
Jadi, anda masih perlu menggunakan indeks komposit untuk carian gabungan.