mongodb的explain命令

1)getting started

explain函數(shù)可以實現(xiàn)查看一些查詢的過程參數(shù)。用法如:

db.yourdb.find().explain()

可以得到一些必要的參數(shù),比如cursor,顯示了所使用的游標類型,比如basicCursor和BtreeCursor,后者意味著當前查詢使用了索引,因為索引是一類B樹,另外還有nscanned字段則顯示了掃描的文檔的個數(shù)。字段n則指明了返回字段的個數(shù)。另外還有millis顯示了做一次查詢所使用的時間,單位是ms。

2)then

我們有些時候會很需要millis字段,因為我們可以通過millis字段了解到當前查詢所使用的時間,同時可以通過觀察cursor的類型和nscanned&&n三個字段了解到當前通過索引查詢的效率。這些都是我們經(jīng)常關(guān)注的東西

3)but

遺憾的事情是,我們并不能一直保證這類的explain的查詢會對每一個結(jié)果有效,更多的僅限于find方法當中,因此我們有時需要找到一些可替代的方案

① distinct

?我們有時候需要在distinct上使用explain函數(shù)來查看執(zhí)行情況,但是很遺憾的是,explain并沒有針對distinct的方法,因此我們可以嘗試使用runCommand函數(shù)來執(zhí)行distinct,如:

執(zhí)行db.developers.distinct("company_category"),我們會得到:

[ 0, 1, 4, 9, 3, 2, 7, 5, 6 ]

但是執(zhí)行db.runCommand({distinct:'developers', key:'company_category'})

我們卻會得到:

{

"values" : [

0,

1,

4,

9,

3,

2,

7,

5,

6

],

"stats" : {

"n" : 135,

"nscanned" : 135,

"nscannedObjects" : 135,

"timems" : 0,

"cursor" : "BasicCursor"

},

"ok" : 1

}

② new Date

在很多時候我們需要查看一個命令運行的大概時間,那么我們可以嘗試一些比較原始的方案:

d = new Date;db.mydatabase.aggregate([{$group:{_id:"$jid"}}]);print(new Date -d + 'ms')

即在開始記錄一個時間,結(jié)束以后記錄一個時間,不過這類的時間精度保持在大約ms上。

③ aggregate

有很多mongo的用戶會發(fā)現(xiàn)aggregate同樣也不支持explain,當鍵入類似db.mydb.aggregate().explain()會發(fā)現(xiàn)shell會提示一句:

Wed Mar? 4 00:04:41.766 TypeError: Object [object Object] has no method 'explain'

很令人沮喪,但是這個問題在mongo 2.6以上的版本得到了解決,有感興趣的用戶可以更新mongodb到更新的版本當中來體驗一把~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容