溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB 3.0 集合方法 db.collection.explain()

發(fā)布時間:2020-08-20 13:18:48 來源:網(wǎng)絡 閱讀:1580 作者:UltraSQL 欄目:MongoDB數(shù)據(jù)庫

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()方法有如下參數(shù):


參數(shù) 類型 描述

verbosity string 可選。指定解析輸出的詳細信息模式。該模式影響了explain()的行為,決定了返回信息的數(shù)量??赡艿哪J接校骸皅ueryPlanner”、“executionStats”和“allPlansExecution”。

默認的模式是“queryPlanner”。


為了cursor.explain()早期版本的向后兼容,MongoDB標識true為“allPlansExecution”,false為“queryPlanner”。


關于模式的更多信息,查看詳細信息模式部分。

 

行為



詳細信息模式


db.collection.explain()的行為和返回信息數(shù)量依賴于verbosity模式。

 

queryPlanner模式


默認情況下,db.collection.explain()運行在queryPlanner詳細信息模式。


MongoDB運行查詢優(yōu)化器選擇評估操作的最優(yōu)計劃。


db.collection.explain()返回被評估方法的queryPlanner信息。

 

executionStats模式


MongoDB運行查詢優(yōu)化器選擇最優(yōu)計劃,執(zhí)行最優(yōu)計劃來完成操作,并返回描述最優(yōu)計劃執(zhí)行的統(tǒng)計信息。


對于寫操作,db.collection.explain()返回關于將會被執(zhí)行的更新或刪除操作的信息,但不應用修改到數(shù)據(jù)庫。


db.collection.explain()對于被評估的方法返回queryPlanner和executionStats信息。然而,executionStats對于放棄的計劃不提供查詢執(zhí)行信息。

 

allPlansExecution模式


MongoDB運行查詢優(yōu)化器選擇最優(yōu)計劃,執(zhí)行最優(yōu)計劃來完成操作。在“allPlansExecution”模式,MongoDB返回描述最優(yōu)計劃的執(zhí)行統(tǒng)計信息,也返回在計劃選擇期間其他備選計劃的統(tǒng)計信息。


對于寫操作,db.collection.explain()返回關于將會被執(zhí)行的更新或刪除操作的信息,但不應用修改到數(shù)據(jù)庫。


db.collection.explain()對于被評估的方法返回queryPlanner和executionStats信息。executionStats對于最優(yōu)計劃博阿含完整的查詢執(zhí)行信息。


如果查詢優(yōu)化器評估了多個計劃,對于最優(yōu)和被放棄的備選計劃,executionStats信息也包含在計劃選擇階段捕獲的部分執(zhí)行信息。

 

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()返回一個游標,它需要調(diào)用.next(),或者它的別名.finish(),以返回explain()結果。如果交互式運行在mongo shell,mongo shell會自動調(diào)用.finish()來返回結果。對于腳本,然而,你必須顯式調(diào)用.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()來返回查詢計劃和執(zhí)行信息:

db.products.explain("executionStats").find(
{ quantity: { $gt: 50 }, category: "apparel" }
)

 

allPlansExecution模式


下面的示例以“allPlansExecution”詳細信息模式運行db.collection.explain()。對于指定的update()操作,db.collection.explain()返回所有的評估的計劃的queryPlanner和executionStats:


注意:

解析的執(zhí)行將不會修改數(shù)據(jù),但是會運行更新操作的預查詢。對于備選計劃,MongoDB返回在計劃選擇階段捕獲的執(zhí)行信息。

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()方法重復這個游標。對于腳本,然而,你必須顯式調(diào)用.next()(或者它的別名.finish())以返回結果:

var explainResult = db.products.explain().find( { category: "apparel" } ).next();

 

輸出


db.collection.explain()操作可以返回相關信息:

1.queryPlanner,它描述了查詢優(yōu)化器選擇的計劃和列出放棄的計劃;

2.executionStats,它描述了最優(yōu)計劃和放棄計劃的執(zhí)行;

3.serverInfo,它提供了關于MongoDB實例的信息。


詳細信息模式(例如:queryPlanner、executionStats、allPlansExecution)決定了結果是否包含executionStats,和executionStats是否包含在計劃選擇階段捕獲的數(shù)據(jù)。


關于輸出的詳細信息,查看解析結果部分。


對于一個混合版本的分片集群,帶有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/

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI