CAS
722
2025-03-31
查詢優化診斷
查詢時候提供了 explain(), 來顯示執行計劃的相關信息, 可以根據結果進行性能優化
執行結果中字段說明
參數
說明
Shards.shardName
分片名稱
Shards.connectionString
此分片上的服務器信息
Shards.serverInfo
服務器信息
Shards.plannerVersion
查詢計劃版本
explain.queryPlanner.namespace
數據庫 . 集合
explain.queryPlanner.indexFilterSet
是否使用到了索引來過濾
explain.queryPlanner.parsedQuery
解析查詢,即過濾條件是什么
explain.queryPlanner.winningPlan
顯示是否通過索引顯示文檔和索引信息
explain.queryPlanner.winningPlan.Stage
查詢時使用哪種方式查詢文檔 常見如下
COLLSCAN 查詢的字段并沒有建立索引, 使用全表掃描
IXSCAN??? 索引掃描
FETCH???? 點查/ 查詢的字段建立了索引(根據索引去檢索指定的document)
SHARD_MERGE? 將各個分片返回數據進行merge
SORT?????????? 查詢時在內存中進行了排序 但沒有使用索引查詢
LIMIT??? 限制顯示查詢結果的數量
SKIP ????????查詢時使用了skip跳過幾個文檔
IDHACK????? 查詢時針對特定的 “_id”進行查詢
TEXT ??????查詢使用全文本索引
COUNT? 利用db.coll.explain().count()之類進行count運算
COUNTSCAN? 查詢計算總數時沒有使用索引
COUNT_SCAN? 查詢計算總數時會使用索引
SUBPLA??????? 使用$or操作符查詢時沒有使用索引
PROJECTION?? 查詢時限制顯示特定字段
explain.queryPlanner.winningPlan. inputStage
explain.queryPlanner.winningPlan.stage的child stage,此處是IXSCAN,表示進行的是index scanning
explain.queryPlanner.winningPlan.indexBounds
winningplan所掃描的索引范圍
Shards.rejectPlans
拒絕執行計劃
OperationTime
執行計劃操作時間
> db.inventory.find({item : "journal"}).sort({status:-1, qty:-1}).explain( "allPlansExecution") { "explainVersion" : "1", #queryPlanner是現版本explain的默認模式,并不會去真正進行query語句查詢,而是針對query語句進行執行計劃分析并選出winning plan "queryPlanner" : { "namespace" : "alex.inventory", # query所查詢的庫 表 "indexFilterSet" : false, # 是否使用到了索引來過濾 "parsedQuery" : { # 解析查詢,即過濾條件是什么 "item" : { "$eq" : "journal" } }, "maxIndexedOrSolutionsReached" : false, "maxIndexedAndSolutionsReached" : false, "maxScansToExplodeReached" : false, "winningPlan" : { # 查詢優化器針對該query所返回的最優執行計劃的詳細內容 "stage" : "SORT", # 最優執行計劃的stage "sortPattern" : { "status" : -1, "qty" : -1 }, "memLimit" : 104857600, "type" : "simple", "inputStage" : { # 一個工作單元,一個stage中可以有多個stage "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "item" : 1 }, "indexName" : "item_1", "isMultiKey" : false, #是否是Multikey,此處返回是false,如果索引建立在array上,此處將是true。 "multiKeyPaths" : { "item" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", #此query的查詢順序,此處是forward,如果用了.sort({w:-1})將顯示backward "indexBounds" : { # 索引掃描范圍 "item" : [ "[\"journal\", \"journal\"]" ] } } } }, "rejectedPlans" : [ ] }, "executionStats" : { #是否執行成功 "executionSuccess" : true, "nReturned" : 1, #查詢的返回條數 "executionTimeMillis" : 0, #整體執行時間 "totalKeysExamined" : 1, #索引掃描次數 "totalDocsExamined" : 1, #document掃描次數 "executionStages" : { "stage" : "SORT", # 用哪種方式去查詢文檔 "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 4, "advanced" : 1, "needTime" : 2, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "sortPattern" : { "status" : -1, "qty" : -1 }, "memLimit" : 104857600, "type" : "simple", "totalDataSizeSorted" : 325, "usedDisk" : false, "inputStage" : { "stage" : "FETCH", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "docsExamined" : 1, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "keyPattern" : { "item" : 1 }, "indexName" : "item_1", "isMultiKey" : false, "multiKeyPaths" : { "item" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "item" : [ "[\"journal\", \"journal\"]" ] }, "keysExamined" : 1, "seeks" : 1, "dupsTested" : 0, "dupsDropped" : 0 } } }, "allPlansExecution" : [ ] }, "command" : { "find" : "inventory", "filter" : { "item" : "journal" }, "sort" : { "status" : -1, "qty" : -1 }, "$db" : "alex" }, "serverInfo" : { "host" : "SWX989839", "port" : 27017, "version" : "5.0.5", "gitVersion" : "d65fd89df3fc039b5c55933c0f71d647a54510ae" }, "serverParameters" : { "internalQueryFacetBufferSizeBytes" : 104857600, "internalQueryFacetMaxOutputDocSizeBytes" : 104857600, "internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600, "internalDocumentSourceGroupMaxMemoryBytes" : 104857600, "internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600, "internalQueryProhibitBlockingMergeOnMongoS" : 0, "internalQueryMaxAddToSetBytes" : 104857600, "internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600 }, "ok" : 1 }
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。