Mogodb sql执行计划

查询执行计划语句

find()前后都可以加.explain()查询执行计划
aggregate()只能在前面加.explain()


db.chat_message_history.find({name:"111"}).explain();

db.chat_message_history.explain().find({name:"111"});

db.chat_message_history.explain().aggregate([
  {
    $match: {
      "name": "111",
      "id": { $in: ["222"] },
      "userId": { 
        $in: [
          "fc7b2214cb8941abf81c09b3ec4550f4",
          "c8d842883e7c7fc4270a5f27e58b5177",
          "ad136f4b54142b4053c2dd284986e198",
          "ffe622d6008f6862b60410abbbf7261c",
          "a9c67b84c5ca347cf97329c52c471b12",
          "1f415daa792ce0dac6274686108fcf6d",
          "1e9949b6cbe32d5416dab19855d42694",
          "e6a1820811a3e7fca9963698b7758ee1",
          "790ea6cec69ae5bf7e820d1ea9af776e",
          "c8b05d13684ffabdea7cee2f35b783a3"
        ]
      },
      "msgTime": {
        $gte: 1750089600000,
        $lte: 1757951940000
      }
    }
  },
  {
    $sort: {
      "msgTime": -1,
      "seq": -1
    }
  },
  {
    $limit: 20000
  }
])

执行结果

下面是对 explain 命令返回结果中各个字段的解释:
优化索引重点关注queryPlanner信息

  1. explainVersion: 指明了使用的 explain 版本。
  2. queryPlanner: 包含 MongoDB 查询优化器所考虑的各种候选索引和最终选择的索引的信息。
  3. command: 显示了被执行的原始命令。
  4. serverInfo: 提供了服务器的一些基本信息,包括版本、主机名等。
  5. serverParameters: 列出了与查询相关的服务器参数。
  6. ok: 表示操作是否成功(1表示成功,0表示失败)。
  7. $clusterTime: 返回集群的时间戳。
  8. operationTime: 返回操作的时间戳。

queryPlanner 详解

  • namespace: 数据库和集合名称。
  • indexFilterSet: 是否应用了索引过滤器。
    • 索引过滤器允许开发者为特定查询模式(Query Shape)显式指定使用的索引,覆盖优化器的默认选择逻辑。
      例如,强制某类查询必须使用复合索引而非单字段索引A。
      适用场景:
      • 优化器自动选择的索引性能不佳时。
      • 需要强制测试特定索引的效果(如性能调优阶段)。
    • 当值为 true 时,说明优化器根据预定义的索引过滤规则选择了特定索引,跳过了自动评估其他索引的流程。
    • 当值为 false 时,优化器会基于查询条件和索引统计信息,自主选择最优执行计划。
  • parsedQuery: 解析后的查询条件。
  • winningPlan: 最终被选中的执行计划。
  • rejectedPlans: 被拒绝的其他执行计划列表。
  • candidateIndexes: 可能用于查询的所有索引列表及其相关信息。
  • directions: 索引扫描的方向。
  • sortPatternRemoved: 如果排序模式被移除,则为 true;否则为 false。
  • coveredIndexScanAllowed: 是否允许覆盖索引扫描。
  • multiKeyAware: 是否意识到多键索引。
  • planCacheEntry: 计划缓存条目信息(如果存在的话)。

winningPlan 和 rejectedPlans 详解

  • stage: 执行阶段类型,例如 COLLSCAN(全表扫描)、IXSCAN(索引扫描)、FETCH(从磁盘获取文档)等。
  • inputStage: 子阶段,即当前阶段依赖的前一阶段。
  • filter: 过滤条件,用于筛选满足条件的文档。
  • indexName: 使用的索引名称。
  • keyPattern: 索引的关键字模式。
  • isMultiKey: 是否是多键索引。
  • isUnique: 索引是否唯一。
  • boundingBoxPredicate: 边界框谓词(仅适用于地理空间索引)。
  • collation: 排序规则。
  • indexBounds: 索引边界条件。
  • nReturned: 返回的文档数量。
  • executionTimeMillisEstimate: 预估的执行时间(毫秒)。
posted @ 2025-09-26 10:57  爪哇搬砖  阅读(10)  评论(0)    收藏  举报