首頁  >  文章  >  MongoDB檢視執行計劃

MongoDB檢視執行計劃

小云云
小云云原創
2017-12-09 16:12:381984瀏覽

本文我們將和大家分享MongoDB查看執行計畫知識,希望可以幫助大家。 MongoDB中的explain()函數可以幫助我們查看查詢相關的信息,這有助於我們快速查找到搜尋瓶頸進而解決它,本文我們就來看看explain()的一些用法及其查詢結果的含義。

1.Linux上安裝MongoDB  
2.MongoDB基本操作 
3.MongoDB資料型別 
4.MongoDB文件更新作業 
5.MongoDB文檔查詢作業(一)  
6.MongoDB文檔查詢作業(二)  
7.MongoDB文檔查詢作業(三)


整體來說,explain()的用法和sort()、limit()用法差不多,不同的是explain()必須放在最後面。

基本用法

先來看一個基本用法:

db.sang_collect.find({x:1}).explain()

直接跟在find()函數後面,表示查看find()函數的執行計劃,結果如下:

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "sang.sang_collect",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "x" : {
                "$eq" : 1.0
            }
        },
        "winningPlan" : {
            "stage" : "COLLSCAN",
            "filter" : {
                "x" : {
                    "$eq" : 1.0
                }
            },
            "direction" : "forward"
        },
        "rejectedPlans" : []
    },
    "serverInfo" : {
        "host" : "localhost.localdomain",
        "port" : 27017,
        "version" : "3.4.9",
        "gitVersion" : "876ebee8c7dd0e2d992f36a848ff4dc50ee6603e"
    },
    "ok" : 1.0
}

返回結果包含兩大塊信息,一個是queryPlanner,即查詢計劃,還有一個是serverInfo,即MongoDB服務的一些信息。那麼這裡牽涉到的參數比較多,我們來一一看一下:

##意義##過濾條件#direction搜尋方向rejectedPlans
#參數
#plannerVersion 查詢計畫版本
#namespace 要查詢的集合
indexFilterSet 是否使用索引
parsedQuery 查詢條件,這裡為x=1
winningPlan 最佳執行計劃
stage 查詢方式,常見的有COLLSCAN/全表掃描、IXSCAN/索引掃描、FETCH /根據索引去檢索文件、SHARD_MERGE/合併分片結果、IDHACK/針對_id進行查詢
filter

拒絕的執行計畫

serverInfo

MongoDB伺服器資訊

新增不同參數

explain()也接收不同的參數,透過設定不同參數我們可以查看更詳細的查詢計劃。 queryPlannerexecutionStats會傳回最佳執行計劃的一些統計信息,如下:
{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "sang.sang_collect",
        "indexFilterSet" : false,
        "parsedQuery" : {},
        "winningPlan" : {
            "stage" : "COLLSCAN",
            "direction" : "forward"
        },
        "rejectedPlans" : []
    },
    "executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 10000,
        "executionTimeMillis" : 4,
        "totalKeysExamined" : 0,
        "totalDocsExamined" : 10000,
        "executionStages" : {
            "stage" : "COLLSCAN",
            "nReturned" : 10000,
            "executionTimeMillisEstimate" : 0,
            "works" : 10002,
            "advanced" : 10000,
            "needTime" : 1,
            "needYield" : 0,
            "saveState" : 78,
            "restoreState" : 78,
            "isEOF" : 1,
            "invalidates" : 0,
            "direction" : "forward",
            "docsExamined" : 10000
        }
    },
    "serverInfo" : {
        "host" : "localhost.localdomain",
        "port" : 27017,
        "version" : "3.4.9",
        "gitVersion" : "876ebee8c7dd0e2d992f36a848ff4dc50ee6603e"
    },
    "ok" : 1.0
}
這裡除了我們上文介紹到的一些參數之外,還多了executionStats參數,意義如下:參數#意思##executionSuccessnReturnedexecutionTimeMillistotalKeysExamined##totalDocsExamined#文件掃描次數executionStages這個分類下描述執行的狀態#stage掃描方式,具體可選值與上文的相同nReturned查詢結果數executionTimeMillisEstimate#預估耗時works工作單元數,一個查詢會分解成小的工作單元優先傳回的結果數
queryPlanner是預設參數,加入queryPlanner參數的查詢結果就是我們上文看到的查詢結果,so,這裡不再贅述。 executionStats
是否執行成功
傳回的結果數
#執行耗時
索引掃描次數
##advanced

docsExamined

文件檢查數目,與totalDocsExamined一致

allPlansExecutionallPlansExecution用來取得所有執行計劃,結果參數基本上與上文相同,這裡就不再細說了。

好了,MongoDB中的explain()我們就說到這裡,小夥伴們有問題歡迎留言討論。 相關推薦:

MongoDB的技巧與注意事項總結

MongoDB固定集合詳解######### ###laravel使用mongodb資料庫的方法教學############
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn