mongodb COUNT_SCAN和IXSCAN之间的区别是什么?

but5z9lq  于 2023-01-25  发布在  Go
关注(0)|答案(1)|浏览(481)

每当我使用explain在MongoDB上运行计数查询时,我会看到两个不同的阶段COUNT_SCAN和IXSCAN。我想知道它们在性能方面的区别,以及如何改进查询。
以下查询:

db.collection.explain(true).count({field:1}})

使用COUNT_SCAN和类似以下的查询:

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

使用IXSCAN。

3j86kqsm

3j86kqsm1#

COUNT_SCAN是通过从索引阅读值来获取计数的最有效的方法,但只能在某些情况下执行,否则,IXSCAN将在对文档进行一些筛选并在内存中进行计数之后执行。
当从辅助服务器阅读时,使用读取关注available。此关注级别不考虑分片簇中的孤立文档,因此不会执行SHARDING_FILTER阶段。这是您看到COUNT_SCAN时的情况。
但是,如果我们使用read concern local,则需要获取文档以执行SHARDING_FILTER过滤器阶段。在这种情况下,需要多个阶段来完成查询:然后是FETCH然后是SHARDING_FILTER

相关问题