MongoDB分析查詢
分析查詢是有效的衡量數據庫和索引設計的一個非常重要的方麵。我們將了解常用$explain 和$hint查詢。
使用 $explain
$explain運算符提供查詢的信息,查詢和其他統計使用的索引。 在分析了解索引優化,這是非常有用的。
在上一章中,我們已經對字段gender和user_name使用下麵的查詢已經為用戶集合創建的索引:
>db.users.ensureIndex({gender:1,user_name:1})
現在我們將使用 $explain 在以下查詢說明:
>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
上麵的 explain() 查詢返回以下分析結果:
{ "cursor" : "BtreeCursor gender_1_user_name_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 0, "nscanned" : 1, "nscannedObjectsAllPlans" : 0, "nscannedAllPlans" : 1, "scanAndOrder" : false, "indexOnly" : true, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "gender" : [ [ "M", "M" ] ], "user_name" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }
現在我們來看看字段在這個結果集:
- indexOnly的值為true表示此查詢使用索引。
- 在遊標字段指定使用的遊標類型。 BTreeCursor類型指示索引被使用,也給出使用的索引的名稱。BasicCursor表明已做了充分的掃描,而無需使用任何索引。
- n表示返回匹配文檔的數量。
- nscannedObjects 表示文檔的掃描總數
- nscanned 表示文檔或索引項掃描總數
使用$hint
hint操作符強製查詢優化器使用指定索引來運行一個查詢。 當你想測試不同的索引查詢的性能,這是特彆有用的。例如,下麵的查詢索引指定字段gender和user_name,用於此查詢:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})使用$explain分析上述查詢:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()