首页 > 解决方案 > 查询行为与 MongoDB 中的解释计划不同

问题描述

我们有一个包含大约 1000 万条记录的 mongo 集合。有两个索引:expires_dateprocessing_state。其中一个查询访问两个expires_date (gte and lte)和之间的数据processing_state = 'PROCESSED'

查询的解释计划显示了两个计划,一个在索引扫描上expires_date,另一个在 上processing_state,但获胜计划显示为expires_date

当我们运行查询时,它会花费很多时间(几乎永远),但如果我们删除该processing_state字段,它几乎会立即完成。

此外,该processing_state字段几乎拥有 1000 万条记录PROCESSED。只有少数记录可以处于PENDINGFAILED状态。如果我们指定processing_state其他PROCESSED查询运行速度很快。

即使提供的日期范围有 0 条记录,此行为也是一致的。

从行为来看,查询似乎是对processing_state而不是进行索引扫描expires_date,这与解释计划所建议的相反。它应该发生的任何原因。

标签: mongodbindexingmongodb-querysql-execution-planmongodb-indexes

解决方案


推荐阅读