Mongodb 计数扫描和IXSCAN之间有什么区别?

Mongodb 计数扫描和IXSCAN之间有什么区别?,mongodb,Mongodb,每当我使用explain在MongoDB上运行计数查询时,我都可以看到两个不同的阶段count_SCAN和IXSCAN。我想知道它们之间的性能差异,以及如何改进查询。 字段被索引 查询db.collection.explain(true).count({field:1}})使用count\u扫描和类似的查询 db.collection.explain(true).count({field:$in:[1,2]})使用IXSCAN。简称:count\u SCAN是通过从索引读取值来获取计数的最有效方

每当我使用explain在MongoDB上运行计数查询时,我都可以看到两个不同的阶段count_SCAN和IXSCAN。我想知道它们之间的性能差异,以及如何改进查询。 字段被索引

查询db.collection.explain(true).count({field:1}})使用count\u扫描和类似的查询


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

简称:
count\u SCAN
是通过从索引读取值来获取计数的最有效方法,但只能在某些情况下执行。否则,
IXSCAN
将在对文档进行一些过滤和内存计数之后执行

从辅助设备读取时,使用读取关注点
可用
。这个关注级别不考虑在锐化的群集中的孤儿文档,因此将不执行<代码> SARGIDENG过滤器阶段。这是当您看到
COUNT\u SCAN

但是,如果我们使用readconcern
local
,我们需要获取文档以执行切分过滤阶段。在这种情况下,有多个阶段来完成查询:
IXSCAN
,然后
FETCH
然后
SHARDING\u FILTER