MongoDB简单查询未使用已创建索引问题排查及解决
MongoDB查询未命中已创建索引,触发全表扫描问题解决
问题场景
- 集合名称:
EN - 创建的索引语句:
db.EN.createIndex( { "Prod_id": 1 } ); - 执行
db.EN.getIndexes()可确认该索引已存在,但执行以下查询时:
返回结果显示查询使用COLLSCAN(全表扫描),未使用已创建的索引。使用MongoDB版本为5.0.9-8。db.EN.find({'Icecat-interface.Product.@Prod_id':'ABCD'}).explain()
问题原因
查询条件中指定的字段是Icecat-interface.Product.@Prod_id,带有@前缀,但创建索引时使用的字段是Prod_id,两者完全不匹配,MongoDB无法匹配到可用索引,因此触发全表扫描。
解决方法
创建与查询字段完全匹配的索引:
db.EN.createIndex( { "Icecat-interface.Product.@Prod_id": 1 } );
重新创建索引后,再次执行查询即可命中索引,避免全表扫描。
内容的提问来源于stack exchange,提问作者Matias
相关产品推荐
相关产品推荐

