在MongoDb中,我有一个索引{a:1,b:1}
。
创建另一个索引{a:1}
是否无用,因为它已被另一个索引覆盖了?
我的查询遵循以下模式:findOne({a:"...",b:"..."})
或find({a:"..."})
。
答案 0 :(得分:1)
查看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
上效率不高。
希望这有帮助。
答案 1 :(得分:1)
由于prefixes
,我认为您不需要创建另一个索引{a:1}
。
索引前缀是索引字段的起始子集。例如,请考虑以下复合索引:
{ "item": 1, "location": 1, "stock": 1 }
索引具有以下索引前缀:
{ item: 1 } { item: 1, location: 1 }
对于复合索引,MongoDB可以使用索引来支持对索引前缀的查询。因此,MongoDB可以使用索引对以下字段进行查询:
item
字段item
字段和location
字段item
字段和location
字段以及stock
字段。