摘要:整體來說,通過查看執行計劃,分析查詢性能情況,可以幫助我們更好的分析和優化,必要的時候可以創建索引,提升查詢性能。
一、概述
MongoDB中的explain()函數可以幫助我們查看查詢相關的信息,查詢分析可以確保我們創建的索引是否有效,是查詢語句性能分析的重要工具。
二、explain()基本用法
explain()的用法是必須放在最后面,語法如下:
db.collecton.find({x:1}).explain()
explain()常用是直接跟在find()函數后面,表示查看find()函數的執行計劃,舉例:
MongoDB Enterprise mongos> db.emp.find({"id":{$lt:1000}}).explain() { "queryPlanner" : { serverInfo" : { "host" : "mongotest1", "port" : 27021, "version" : "3.2.8", "gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0" }, "plannerVersion" : 1, "namespace" : "testdb.emp", "indexFilterSet" : false, "parsedQuery" : { "id" : { "$lt" : 1000 } }, winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "SHARDING_FILTER", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "id" : 1 }, "indexName" : "id_1", "direction" : "forward", }, "rejectedPlans" : [ ] }, "ok" : 1 }
參數說明:
以上我們看到的是explain()默認參數的情況,其實MongoDB 3.0之后,explain的返回與使用方法與之前版本有了很大的變化,
3.0+版本的explain有三種模式,分別是:queryPlanner、executionStats、allPlansExecution。常用的是queryPlanner和executionStats模式
那我們再來看看executionStats這種模式
MongoDB Enterprise mongos> db.emp.find({"id":{$lt:1000}}).explain("executionStats") { "queryPlanner" : { "mongosPlannerVersion" : 1, "winningPlan" : { "stage" : "SHARD_MERGE", }, "rejectedPlans" : [ ] }, "executionStats" : { "nReturned" : 999, "executionTimeMillis" : 35, "totalKeysExamined" : 999, "totalDocsExamined" : 999, "executionStages" : { "stage" : "SHARD_MERGE", "nReturned" : 999, "executionTimeMillis" : 35, "totalKeysExamined" : 999, "totalDocsExamined" : 999, "totalChildMillis" : NumberLong(33), "shards" : [ { "shardName" : "shard1", "executionSuccess" : true, "executionStages" : { "stage" : "FETCH", "nReturned" : 980, "executionTimeMillisEstimate" : 30, "works" : 981, "advanced" : 980, "needTime" : 0, "needYield" : 0, "saveState" : 7, "restoreState" : 7, "isEOF" : 1, "invalidates" : 0, "docsExamined" : 980, "alreadyHasObj" : 0 }, "ok" : 1 }
executionStats的參數說明:
在此看來,executionStats這種模式比默認的queryPlanner給出來個更多的可參考的信息,
另外一種模式allPlansExecution是用來獲取所有執行計劃,參數基本與以上的相同,這里就不再詳細說明。
三、總結
原來explain()也是可以接收不同的參數,通過設置不同參數我們可以查看更詳細的查詢計劃。
queryPlanner:查詢計劃的選擇器,首先進行查詢分析,最終選擇一個winningPlan,是explain返回的默認模式
executionStats:為執行統計模式,返回winningPlan的統計結果
allPlansExecution:為返回所有執行計劃的統計,包括rejectedPlan
所以:我們在查詢優化的時候,只需要關注queryPlanner, executionStats即可,因為queryPlanner為我們選擇出了winningPlan, 而executionStats為我們統計了winningPlan的所有關鍵數據。
整體來說,通過explain()查看執行計劃,分析查詢性能情況,可以幫助我們更好的分析和優化,必要的時候可以創建索引,提升查詢性能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19402.html
摘要:優志愿張海鵬宋體背景宋體每年月下旬到月下旬期間是高考填志愿的高峰期,也是優志愿后端面臨大流量高并發請求的業務高峰期。對于優志愿讀多寫少的場景及其業務高峰期,用戶可以按需增刪節點,更好地實現讀取性能的擴展。 隨著用戶規模的增長,數據庫的壓力也在成倍增加。面對大流量、高并發,UCloud MongoDB 做到了高效,并展現出了更好的性能體驗。 —— 優志愿 CTO 張海鵬 背景...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執行次查詢之后,查詢優化器都會重新評估查詢計劃。上一篇文章指南使用復合索引操作符如何使用索引索引對象和數組索引基數下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復合索引、$操作符如何使用索引、索引對象和數組、索引基數下一篇文章:MongoDB指南---13、索引類型 使用explain...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執行次查詢之后,查詢優化器都會重新評估查詢計劃。上一篇文章指南使用復合索引操作符如何使用索引索引對象和數組索引基數下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復合索引、$操作符如何使用索引、索引對象和數組、索引基數下一篇文章:MongoDB指南---13、索引類型 使用explain...
摘要:所以在掃描次后,率先到達狀態,那么此刻將停止掃描,進入到算分的階段。除了這條引發故障的之外,其他的字段命中索引數量都非常小,有的甚至只有一條。那這里很明顯在中只去根據中執行計劃的相關索引來進行判斷是不合理的。 前段時間筆者遇到一個MongoBD Plan Cache的bug,于是深究了下MongoDB優化器相關源碼。在這里分享給大家,一方面讓大家知道MongoDB優化器工作原理,一方面...
閱讀 1436·2021-09-22 16:04
閱讀 2800·2019-08-30 15:44
閱讀 888·2019-08-30 15:43
閱讀 766·2019-08-29 15:24
閱讀 1845·2019-08-29 14:07
閱讀 1134·2019-08-29 12:30
閱讀 1729·2019-08-29 11:15
閱讀 2741·2019-08-28 18:08