比如脚本在不停的写数据(数据的层级很深),tail -f 日志可以看到已经写入到 10000 条了,在 mongodb 里面也可以 find 这条数据,但是直接 count 却只有 9800 条数据,并且一直落后 200 条,与这条数据相关的大概 9 条索引(不要问我为什么这么多索引,我也不想的,我也决定不了) 索引的属性 background 为 true 是否可以认为当用索引的时候,如果这条数据索引没有建立完毕就查询不到?
1 回答
开满天机
TA贡献1786条经验 获得超13个赞
需要看一下执行计划:
db.<表>.explain(true).count(<条件>);
从中可以了解到count时是否可以用到索引,用到哪条索引。{background: true}
的索引只是在初次创建时不阻塞前台线程,并不是指异步创建索引,所以不存在你说的问题。
可能性较大的是这9条索引中有一个或多个是部分索引,而执行计划选中的是这个索引。可以查看索引配置:
db.<表>.getIndexes();
通常MongoDB不太可能选择这样的索引来count,所以也可能是特定版本的bug,希望看到你的服务端版本来确认:
db.serverBuildVersion();
综上,我们需要看到:
执行计划
9条索引的配置
MongoDB版本
- 1 回答
- 0 关注
- 1296 浏览
添加回答
举报
0/150
提交
取消