在MongoDb中,我有一個索引{a:1,b:1}
。 正在創建另一個索引{a:1}
沒用,因爲它已經被另一個索引了?MongoDB:第二個索引是無用的嗎?
我的查詢符合下列模式:findOne({a:"...",b:"..."})
或find({a:"..."})
。
在MongoDb中,我有一個索引{a:1,b:1}
。 正在創建另一個索引{a:1}
沒用,因爲它已經被另一個索引了?MongoDB:第二個索引是無用的嗎?
我的查詢符合下列模式:findOne({a:"...",b:"..."})
或find({a:"..."})
。
我想你不需要創建另一個索引{a:1}
,因爲prefixes
。
索引前綴是索引字段的開始子集。例如,考慮下面的化合物索引:
{ "item": 1, "location": 1, "stock": 1 }
索引具有以下索引的前綴:
{ item: 1 } { item: 1, location: 1 }
對於複合索引,MongoDB的可以使用索引來支持查詢的索引前綴。這樣,MongoDB的可以使用查詢的索引上的以下字段:
- 的
item
字段,- 的
item
字段和location
字段,- 的
item
字段和location
字段和stock
領域。
查看MongoDB文檔Create a compound index。
以下操作創建的項目和股票領域的升序索引:
db.products.createIndex({ "item": 1, "stock": 1 })
除了支持匹配所有索引字段的查詢, 複合索引可以支持匹配的是查詢索引字段的前綴 。 即,索引支持查詢的
item
字段 以及既item
和stock
字段:
db.products.find({ item: "Banana" })
db.products.find({ item: "Banana", stock: { $gt: 5 } })
對於複合索引,MongoDB的可以使用索引來支持查詢的索引前綴。
順便說一句,如果你創建一個複合索引:
{ "item": 1, "location": 1, "stock": 1 }
MongoDB中可以使用的查詢索引以下字段:
但它不會像item
和stock
那樣高效。
希望這會有所幫助。
這並沒有真正回答我的問題,但你的鏈接確實如此。 「集合上的以下索引:{x:1,y:1,z:1}可以支持以下索引支持的查詢:{x:1},{x:1,y:1}」 – RainingChain
@RainingChain對不起爲此,我更新了我的答案,希望這有助於。 – McGrady