mongodb - 查询行为与 MongoDB 中的解释计划不同
问题描述
我们有一个包含大约 1000 万条记录的 mongo 集合。有两个索引:expires_date
和processing_state
。其中一个查询访问两个expires_date (gte and lte)
和之间的数据processing_state = 'PROCESSED'
。
查询的解释计划显示了两个计划,一个在索引扫描上expires_date
,另一个在 上processing_state
,但获胜计划显示为expires_date
。
当我们运行查询时,它会花费很多时间(几乎永远),但如果我们删除该processing_state
字段,它几乎会立即完成。
此外,该processing_state
字段几乎拥有 1000 万条记录PROCESSED
。只有少数记录可以处于PENDING
或FAILED
状态。如果我们指定processing_state
其他PROCESSED
查询运行速度很快。
即使提供的日期范围有 0 条记录,此行为也是一致的。
从行为来看,查询似乎是对processing_state
而不是进行索引扫描expires_date
,这与解释计划所建议的相反。它应该发生的任何原因。
解决方案
推荐阅读
- python - python套接字服务器中的客户端线程
- c# - 如果内容不合适,XtraReports 分页?
- linux - sh 奇怪的命令输出 - vscode 远程 ssh
- c++ - NSight Compute - 预期银行冲突但未检测到任何
- c# - 扩展器不显示包含下划线的标题
- linux - Linux Shell“粘贴”命令 - 保证基于行的交错?
- javascript - 在选择选项中更改图像
- git - 错误 /opt/stack/devstack/functions-common:629 git 调用失败:git clone https://opendev.org/openstack/requirements.git
- hl7-fhir - Asymmetrik FHIR mongo:部分患者已存储
- reactjs - React Native:“渲染的钩子比预期的要少。” 不知道这意味着什么,应用程序崩溃?