COUNT_SCAN和IXSCAN有什么区别?

时间:2018-03-29 11:29:31

标签: mongodb

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

query db.collection.explain(true).count({field:1}})使用COUNT_SCAN和查询

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

1 个答案:

答案 0 :(得分:1)

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

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

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