MongoDB同字段并存单键与复合索引时,查询该字段会使用哪个索引?
结论
该查询会优先使用 {"productLowerCase" : 1} 单键索引。
逻辑说明
- 你的查询用的正则
/^cap/是前缀固定的左匹配规则,完全可以利用productLowerCase字段的升序索引,两个索引都符合候选条件:- 单键索引本身就是该字段的升序排序结构,直接匹配过滤需求
- 复合索引的第一前缀是
productLowerCase: 1,也支持仅针对该字段的过滤查询
- MongoDB查询优化器会对所有候选索引做性能压测,选择执行成本最低的方案:单键索引的每条条目仅存储
productLowerCase值和对应文档位置,整体体积比带额外时间戳字段的复合索引小很多,同范围扫描的效率更高,因此会被优先选中。
你可以执行
db.coll.find({"productLowerCase" : {$regex : /^cap/}}).explain('executionStats'),查看返回结果里的winningPlan字段,确认实际使用的索引。
内容的提问来源于stack exchange,提问作者Jithin Variyar
相关产品推荐
相关产品推荐

