我有一個包含3種數字性質的化合物_id:MongoDB中複合_id的預期行爲?
_id「:{ 」KEYA「:0, 」KEYB「:0, 」KeyC「:0 }
在考慮中的數據庫具有用於KEYA和500k的相同的值的2000000倍相同的值集羣以KEYB
我的理解是,我可以爲KEYA和KEYB使用命令有效地查詢:
find({ "_id.KeyA" : 1, "_id.KeyB": 3 }).limit(100)
當我解釋這個查詢的結果是:
"cursor" : "BasicCursor",
"nscanned" : 1000100,
"nscannedObjects" : 1000100,
"n" : 100,
"millis" : 1592,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {}
沒有限制()的結果是:
"cursor" : "BasicCursor",
"nscanned" : 2000000,
"nscannedObjects" : 2000000,
"n" : 500000,
"millis" : 3181,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {}
據我瞭解BasicCursor意味着指數已經忽略,這兩個查詢有高執行時間 - 即使我只需要100個記錄,也需要1.5秒。我打算用限制來實現分頁,但這顯然太慢了。
的命令:
find({ "_id.KeyA" : 1, "_id.KeyB": 3, , "_id.KeyC": 1000 })
正確地使用BtreeCursor並執行快速暗示化合物_id是正確的。
我使用的MongoDB的版本1.8.3。有人可以澄清,如果我看到預期的行爲,或者我誤解了如何使用/查詢複合索引?
謝謝, 保羅。
西奧 - 感謝,而你的回答是基本相同mstreams我已經接受你的答案,因爲你明確地指出,_id場沒有給我一個複合索引(這是我未能把握位) 。我天真地認爲,如果我在自動編制索引的_id字段上創建了一個複合鍵,那麼最終結果將是一個複合索引。你生活和學習。 – Paul