位置:首頁 > 數據庫 > MongoDB教學 > MongoDB分析查詢

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()