每当我在MongoDB上运行带有解释的计数查询时,我都会看到两个不同的阶段COUNT_SCAN和IXSCAN。我想根据性能了解它们之间的区别,以及如何改善查询。
字段被索引。

查询db.collection.explain(true).count({field:1}})使用COUNT_SCAN并查询如下

db.collection.explain(true).count({field:“ $ in”:[1,2]})使用IXSCAN。

最佳答案

简称:COUNT_SCAN是通过从索引中读取值来获得计数的最有效方法,但是只能在某些情况下执行。否则,先执行IXSCAN,然后进行一些文档过滤和内存计数。

从辅助读取时,将使用读取关注available。此关注级别不考虑分片群集中的孤立文档,因此不会执行SHARDING_FILTER阶段。当您看到COUNT_SCAN时。

但是,如果使用读取关注local,则需要获取文档以执行SHARDING_FILTER过滤器阶段。在这种情况下,有多个阶段可以满足查询:IXSCAN,然后是FETCH,然后是SHARDING_FILTER

关于mongodb - COUNT_SCAN和IXSCAN有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49554932/

10-11 10:41