每当我在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/