小编rbu*_*rte的帖子

当 INDEX 匹配时,MongoDB 阶段是否应该避免 FETCH?

根据文档,当索引覆盖查询时,MongoDB 应跳过 FETCH 阶段。

\n

如果我理解正确的话,这句话解释了这种行为:

\n
\n

覆盖查询 当索引覆盖查询时,MongoDB 既可以匹配查询条件,又可以仅使用索引键返回结果;\ni.e. MongoDB 不需要检查集合中的文档来\n返回结果。

\n

当索引覆盖查询时,解释结果有一个 IXSCAN 阶段,\n该阶段不是 FETCH 阶段的后代,并且在executionStats 中,\ntotalDocsExamined 为 0。

\n

在 MongoDB 的早期版本中,cursor.explain() 返回\nindexOnly 字段来指示索引是否覆盖查询。\n( https://docs.mongodb.com/manual/reference/explain-results/ )

\n
\n

和这个

\n
\n

这样,查询耗时不到 2 毫秒。由于索引\n\xe2\x80\x98 覆盖了\xe2\x80\x99 查询,MongoDB 能够匹配查询条件\n并仅使用索引返回结果钥匙;甚至不需要检查集合中的文档来返回结果。(如果您在执行计划中看到 IXSCAN 阶段不是 FETCH 阶段的子级,则索引 \xe2\x80\x98 覆盖\xe2\x80\x99 查询。)( https://studio3t.com /知识库/文章/mongodb-index-strategy/

\n
\n

但在测试场景中它不会发生:

\n

测试示例:

\n
    db.Test.insert({"Field1":"data on field1: 1","Field2":"data on field2: 1"});\n    db.Test.insert({"Field1":"data on field1: 2","Field2":"data on field2: 2"});\n    db.Test.insert({"Field1":"data on field1: 3","Field2":"data on field2: 3"});\n    db.Test.insert({"Field1":"data on …
Run Code Online (Sandbox Code Playgroud)

indexing mongodb

3
推荐指数
1
解决办法
6195
查看次数

标签 统计

indexing ×1

mongodb ×1