您好,登錄后才能下訂單哦!
MongoDB 3.0 集合方法 db.collection.explain()
描述
db.collection.explain()
3.0版本的新功能
返回如下操作的查詢計劃信息:
aggregate();
count();
find();
group();
remove();
update();
為了使用db.collection.explain(),追加以上可用方法到db.collection.explain()來做解析:
db.collection.explain().<method(...)>
例如:
db.products.explain().remove({category:"apparel"},{justOne:true})
更多例子,查看下面示例部分。使用db.collection.explain()的可用方法列表,查看db.collection.explain().help()部分。
db.collection.explain()方法有如下參數:
參數 類型 描述
verbosity string 可選。指定解析輸出的詳細信息模式。該模式影響了explain()的行為,決定了返回信息的數量。可能的模式有:“queryPlanner”、“executionStats”和“allPlansExecution”。
默認的模式是“queryPlanner”。
為了cursor.explain()早期版本的向后兼容,MongoDB標識true為“allPlansExecution”,false為“queryPlanner”。
關于模式的更多信息,查看詳細信息模式部分。
行為
詳細信息模式
db.collection.explain()的行為和返回信息數量依賴于verbosity模式。
queryPlanner模式
默認情況下,db.collection.explain()運行在queryPlanner詳細信息模式。
MongoDB運行查詢優化器選擇評估操作的最優計劃。
db.collection.explain()返回被評估方法的queryPlanner信息。
executionStats模式
MongoDB運行查詢優化器選擇最優計劃,執行最優計劃來完成操作,并返回描述最優計劃執行的統計信息。
對于寫操作,db.collection.explain()返回關于將會被執行的更新或刪除操作的信息,但不應用修改到數據庫。
db.collection.explain()對于被評估的方法返回queryPlanner和executionStats信息。然而,executionStats對于放棄的計劃不提供查詢執行信息。
allPlansExecution模式
MongoDB運行查詢優化器選擇最優計劃,執行最優計劃來完成操作。在“allPlansExecution”模式,MongoDB返回描述最優計劃的執行統計信息,也返回在計劃選擇期間其他備選計劃的統計信息。
對于寫操作,db.collection.explain()返回關于將會被執行的更新或刪除操作的信息,但不應用修改到數據庫。
db.collection.explain()對于被評估的方法返回queryPlanner和executionStats信息。executionStats對于最優計劃博阿含完整的查詢執行信息。
如果查詢優化器評估了多個計劃,對于最優和被放棄的備選計劃,executionStats信息也包含在計劃選擇階段捕獲的部分執行信息。
explain()技巧
db.collection.explain()方法包裝了explain命令,它是運行explain的更好方式。
db.collection.explain().find()類似于db.collection.find().explain()有如下關鍵不同:
1.db.collection.explain().find()結構允許增加查詢修飾符鏈。列出查詢修飾符列表,查看db.collection.explain().find().help()部分。
2.db.collection.explain().find()返回一個游標,它需要調用.next(),或者它的別名.finish(),以返回explain()結果。如果交互式運行在mongo shell,mongo shell會自動調用.finish()來返回結果。對于腳本,然而,你必須顯式調用.next()或.finish()以返回結果。列出游標相關的方法,查看db.collection.explain().find().help()部分。
db.collection.explain().aggregate()等價于傳遞explain選項到db.collection.aggregate()方法。
help()
為了查看db.collection.explain()支持的操作的列表,運行:
db.collection.explain().help()
db.collection.explain().find()返回一個游標,它允許增加查詢修飾符鏈。為了查看db.collection.explain().find()支持的查詢修飾符的列表以及游標相關的方法,運行:
db.collection.explain().find().help()
你可以鏈接多個修飾符到db.collection.explain().find()。示例,可以查看使用修飾符解析find()部分。
示例
queryPlanner模式
默認情況下,db.collection.explain()運行在“queryPlanner”詳細信息模式。
下面的示例對于指定的count()操作,以“queryPlanner”模式運行db.collection.explain()來返回查詢計劃信息:
db.products.explain().count( { quantity: { $gt: 50 } } )
executionStats模式
下面的示例對于指定的find()操作,以“executionStats”詳細信息模式運行db.collection.explain()來返回查詢計劃和執行信息:
db.products.explain("executionStats").find( { quantity: { $gt: 50 }, category: "apparel" } )
allPlansExecution模式
下面的示例以“allPlansExecution”詳細信息模式運行db.collection.explain()。對于指定的update()操作,db.collection.explain()返回所有的評估的計劃的queryPlanner和executionStats:
注意:
解析的執行將不會修改數據,但是會運行更新操作的預查詢。對于備選計劃,MongoDB返回在計劃選擇階段捕獲的執行信息。
db.products.explain("allPlansExecution").update( { quantity: { $lt: 1000}, category: "apparel" }, { $set: { reorder: true } } )
使用修飾符解析find()
db.collection.explain().find()結構允許查詢修飾符鏈。例如,下面的操作提供了使用sort()和hint()查詢修飾符的find()方法的信息:
db.products.explain("executionStats").find( { quantity: { $gt: 50 }, category: "apparel" } ).sort( { quantity: -1 } ).hint( { category: 1, quantity: -1 } )
獲得可用的查詢修飾符列表,在mongo shell中運行:
db.collection.explain().find().help()
重申explain().find()返回游標
db.collection.explain().find()返回解析結果的游標。如果在mongo shell交互式運行,mongo shell自動使用.next()方法重復這個游標。對于腳本,然而,你必須顯式調用.next()(或者它的別名.finish())以返回結果:
var explainResult = db.products.explain().find( { category: "apparel" } ).next();
輸出
db.collection.explain()操作可以返回相關信息:
1.queryPlanner,它描述了查詢優化器選擇的計劃和列出放棄的計劃;
2.executionStats,它描述了最優計劃和放棄計劃的執行;
3.serverInfo,它提供了關于MongoDB實例的信息。
詳細信息模式(例如:queryPlanner、executionStats、allPlansExecution)決定了結果是否包含executionStats,和executionStats是否包含在計劃選擇階段捕獲的數據。
關于輸出的詳細信息,查看解析結果部分。
對于一個混合版本的分片集群,帶有3.0版本的mongos和至少一個2.6版本的mongod分片,當你在3.0版本的mongo shell運行db.collection.explain(),db.collection.explain()將重試$explain操作以2.6版本格式返回結果。
參見:
http://docs.mongodb.org/manual/reference/method/db.collection.explain/
http://docs.mongodb.org/manual/reference/command/explain/
http://docs.mongodb.org/manual/reference/explain-results/
http://docs.mongodb.org/manual/reference/operator/meta/explain/
http://docs.mongodb.org/manual/reference/operator/query-modifier/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。