MongoDB 執行計劃字段解釋
1. 階段操作描述
- COLLSCAN 集合掃描
- IXSCAN 索引掃描
- FETCH 檢出文檔
- SHARD_MERGE 合併分片中結果
- SHARDING_FILTER 分片中過濾掉孤立文檔
- LIMIT 使用limit 限制返回數
- PROJECTION 使用 skip 進行跳過
- IDHACK 針對_id進行查詢
- COUNT 利用db.coll.explain().count()之類進行count運算
- COUNTSCAN count不使用Index進行count時的stage返回
- COUNT_SCAN count使用了Index進行count時的stage返回
- SUBPLA 未使用到索引的$or查詢的stage返回
- TEXT 使用全文索引進行查詢時候的stage返回
- PROJECTION 限定返回字段時候stage的返回
2. queryPlanner
- queryPlanner.namespace 一個字符串,指定運行查詢的命名空間(即.)。
- queryPlanner.indexFilterSet boolan值,表示MongoDB 對於此query shape 是否使用了索引過濾器。
- queryPlanner.winningPlan 文檔類型,詳細顯示查詢優化程序選擇的查詢計劃。
- winningPlan.stage 階段名稱。每個階段都有每個階段特有的信息。 例如,IXSCAN 階段將包括索引邊界以及特定於索引掃描的其他數據。 如果階段具有子階段或多個子階段,則階段將具有inputStage 或 inputStages。
- winningPlan.inputStage 描述子階段的文檔。它爲其父級提供文檔或索引鍵。 如果父級只有一個子級,則該字段存在。
- winningPlan.inputStages 描述子階段的數組。子階段爲父階段提供文檔或索引鍵。 如果父級具有多個子節點,則該字段存在。 例如,$or 表達式或索引交集的階段消耗來自多個源的輸入。
- queryPlanner.rejectedPlans 查詢優化器考慮和拒絕的候選計劃數組。 如果沒有其他候選計劃,則該數組可以爲空。
3. executionStats
-
executionStats 描述獲勝計劃完整的查詢執行信息。 對於寫入操作,是指將要執行修改的信息,但不會真實修改數據庫。
-
executionStats.nReturned 查詢條件匹配到的文檔數量。
-
executionStats.executionTimeMillis 查詢計劃選擇和查詢執行所需的總時間(以毫秒爲單位)。executionTimeMillis 對應於早期版本的MongoDB中cursor.explain() 返回的millis字段。
-
executionStats.totalKeysExamined 掃描的索引條目數。totalKeysExamined 對應於早期版本的MongoDB中cursor.explain() 返回的 nscanned字段。
-
executionStats.totalDocsExamined 掃描的文檔數。totalDocsExamined 對應於早期版本的MongoDB中cursor.explain() 返回的 nscannedObjects字段。
-
executionStats.executionStages 階段樹形式展示獲勝計劃完整的執行信息。即,一個階段可以有一個inputStage或多個inputStages。
-
executionStats.executionStages.works 查詢執行階段執行的“工作單元”的數量。 查詢執行階段將其工作分爲小單元。 “工作單位”可能包括檢查單個索引鍵,從集合中提取單個文檔,將投影應用於單個文檔或執行內部記賬。
-
executionStats.executionStages.advanced 返回到父階段的結果數。
-
executionStats.executionStages.needTime 未將中間結果返回給其父級的工作循環數。 例如,索引掃描階段可以花費一個工作週期來尋找索引中的新位置而不是返回索引關鍵字; 這個工作週期將計入explain.executionStats.executionStages.needTime而不是explain.executionStats.executionStages.advanced。
-
executionStats.executionStages.needYield 存儲層請求查詢系統產生鎖定的次數。
-
executionStats.executionStages.isEOF 執行階段是否已到達流的結尾:
- 如果爲true或1,則執行階段已到達流末尾。
- 如果爲false或0,則階段可能仍會返回結果。 例如,有限制的查詢,其執行階段包含LIMIT階段,其中查詢的輸入階段爲IXSCAN。 如果查詢返回超過指定的限制,LIMIT階段將報告isEOF:1,但其基礎IXSCAN階段將報告isEOF:0。
-
executionStats.executionStages.inputStage.keysExamined 對於掃描索引的查詢執行階段(例如IXSCAN),keysExamined是在索引掃描過程中檢查的入站和越界鍵的總數。 如果索引掃描由單個連續範圍的鍵組成,則只需要檢查入站鍵。 如果索引邊界由若干鍵範圍組成,則索引掃描執行過程可以檢查越界鍵,以便從一個範圍的末尾跳到下一個範圍的開頭。