当前位置: 首页 > 知识库问答 >
问题:

后端 - mongodb查询分析?

唐烨煜
2023-10-02

场景:有一个关于分类记录collection,分类name(string,中文,英文,数字等组成)字段上有索引方便快速筛选某个分类记录,现在查询出来需要排序,查询条件{name:"F1"},排序条件{_id:-1}

mongodb查询explain分析,这是winningPlan

      {"stage": "SORT",        "planNodeId": 3,        "sortPattern": { "_id": 1 },        "memLimit": 104857600,        "limitAmount": 5,        "type": "simple",        "inputStage": {          "stage": "FETCH",          "planNodeId": 2,          "inputStage": {            "stage": "IXSCAN",            "planNodeId": 1,            "keyPattern": { "name": -1 },            "indexName": "name_-1",            "isMultiKey": false,            "multiKeyPaths": { "name": [] },            "isUnique": false,            "isSparse": false,            "isPartial": false,            "indexVersion": 2,            "direction": "forward",            "indexBounds": {              "name": ["[\"F1\", \"F1\"]"]            }          }        }

SORT + FETCH + IXSCAN 这算不算bad查询,通常是FETCH + IXSCAN。

共有1个答案

苏宜人
2023-10-02

这个查询并不算bad,因为它使用了正确的索引并且避免了全表扫描。

IXSCAN 阶段是 MongoDB 使用索引来扫描集合的阶段。在这个查询中,MongoDB 使用名为 "name_-1" 的索引来查找 name 字段值等于 "F1" 的文档。这是由 indexBounds 参数确定的,它表示索引的范围是 ["F1", "F1"],即索引键的值等于 "F1"。

接下来是 FETCH 阶段,这是 MongoDB 获取在 IXSCAN 阶段中选择的文档的阶段。在这个阶段,MongoDB 获取所有匹配的文档,而不考虑它们在集合中的顺序。

最后是 SORT 阶段,这个阶段对 FETCH 阶段返回的文档进行排序。在这个查询中,SORT 阶段按照 _id 字段降序排序文档。

通常,查询优化的目标是尽量避免全表扫描(即没有使用索引的情况)。在这个查询中,通过使用索引,MongoDB 没有进行全表扫描,因此这个查询是有效的。

另外,查询中的 LIMITOFFSET 子句表示只返回排序后的前五个文档。由于查询结果只有五个文档,所以 MongoDB 没有执行额外的 FETCH 阶段来获取更多的文档。

总之,这个查询是有效的,因为它使用了正确的索引并且避免了全表扫描。尽管它涉及到多个阶段,但是每个阶段都有其明确的用途,并且整个查询的执行效率高。

 类似资料:
  • 主要内容:$explain,$hint查询分析是衡量数据库和索引设计有效性的一个非常重要的方式。下面我们来介绍一下比较常用的 $explain 和 $hint 查询。 $explain $explain 运算符提供了有关查询、索引使用以及查询统计的相关信息,这在索引优化方面非常有用。《 MongoDB覆盖索引查询》一节中我们已经使用以下代码在 users 集合中的 gender 和 name 字段上的创建了索引: 在 mongo sh

  • 我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

  • 问题内容: 我有一个博客系统,可将上传的文件存储到GridFS系统中。问题是,我不知道如何查询它! 我将Mongoose与尚未支持GridFS的NodeJS一起使用,因此我将实际的mongodb模块用于GridFS操作。没有SEEM可以像常规集合中的文档一样查询文件元数据。 将元数据存储在指向GridFS objectId的文档中是否明智?可以轻松查询? 任何帮助将不胜感激,我有点卡住了:/ 问题

  • 我在MongoDB中有以下表单的集合。正如您所看到的,有些文档有两个成员“id”和“xid”,而有些文档只有1个“id”(除了对象_id之外) 我想创建一个mongoexport语句,它将ID和xid值都>0的文档导出到仅csv的文档

  • 例如,我在MongoDB中有以下数据: 现在我想查询“SUM传入的数量在11 - 12之间”(结果应该是500),我如何使用Mongo Shell来做到这一点?

  • 问题内容: 我希望从我的用户模型中检索一些信息,如下所示: 在主页中,我有一个 位置 过滤器,您可以在其中浏览来自国家或城市的用户。 所有字段还包含其中的用户数: 在主页上,然后我还有“学生和老师”页面,我希望仅提供有关这些国家和城市有多少老师的信息… 我想做的是创建一个对MongoDB的查询,以通过单个查询检索所有这些信息。 此刻查询如下: 问题是我不知道如何获取所需的所有信息。 我不知道如何获