sho*_*ujs 12 indexing optimization mongodb
我有一个mongodb集合,"功能",有3个字段:名称,活动,重量.我将按重量降序排序功能:
db.features.find({active:true},{name:1, weight:1}).sort({weight:-1})
Run Code Online (Sandbox Code Playgroud)
为了优化,我为它创建索引:
db.features.ensureIndex({'active': 1, 'weight': -1})
Run Code Online (Sandbox Code Playgroud)
我可以看到它explain()在查询中使用时效果很好.
但是,当我通过权重提升查询它时,我想我刚刚创建的索引将无法工作,我需要创建另一个权重提升索引.查询:
db.features.find({active:true},{name:1, weight:1}).sort({weight:1}).explain()
Run Code Online (Sandbox Code Playgroud)
当我使用explain()来显示索引如何工作时,我发现它打印出来:
"cursor" : "BtreeCursor active_1_weight_-1 reverse",
Run Code Online (Sandbox Code Playgroud)
索引是否反向意味着查询是否被索引优化?
一般来说,我是否需要创建2个索引,如重量上升和下降重量,如果我按重量递增排序,在某些情况下降序,在其他情况下降?
ann*_*ann 13
我知道我迟到了,但我想补充一点细节.当您使用explain()并输出cursor:BtreeCursor时,它并不总是保证只使用索引来满足您的查询.您还必须检查explain()结果中的"indexOnly"选项.如果indexOnly输出为true,则表示仅使用索引满足查询,并且根本没有引用集合中的文档.这称为"覆盖索引查询" http://docs.mongodb.org/manual/applications/indexes/
但是如果解释的结果是游标:BtreeCursor和indexOnly:false,则意味着除了使用索引之外,还引用了该集合.在你的情况下,对于查询:
db.features.find({active:true},{name:1, weight:1}).sort({weight:1}).explain()
Run Code Online (Sandbox Code Playgroud)
Mongo会使用索引'active':1,'weight': - 1来满足查询的初始部分,即db.features.find({active:true}),并且可以在不使用索引的情况下完成排序.所以要确切地知道,你必须在explain()中查看indexOnly结果.
| 归档时间: |
|
| 查看次数: |
7626 次 |
| 最近记录: |