鍍金池/ 教程/ 數(shù)據(jù)庫/ 查詢分析
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級索引
索引
優(yōu)勢
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫
固定集合
關系
聚合
自動增長
復制
限制記錄
部署
分片
正則表達式
原子操作

查詢分析

對于衡量數(shù)據(jù)庫及索引設計的效率來說,分析查詢是一個很重要的衡量方式。經常使用的查詢有 $explain$hint。

使用 $explain

$explain 操作提供的消息包括:查詢消息、查詢所使用的索引以及其他的統(tǒng)計信息。在分析索引優(yōu)化方案時,這是一個非常有用的工具。

在上一節(jié)中,我們使用如下查詢,針對 users 集合的字段 gender 和 user_name 創(chuàng)建了索引:

>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 的真值代表該查詢使用了索引。
  • cursor 字段指定了游標所用的類型。BTreeCursor 類型代表了使用了索引并且提供了所用索引的名稱。BasicCursor 表示進行了完整掃描,沒有使用任何索引。
  • n 代表所返回的匹配文檔的數(shù)量。
  • nscannedObjects 表示已掃描文檔的總數(shù)。
  • nscanned 所掃描的文檔或索引項的總數(shù)。

使用 $hint

$hint 操作符強制索引優(yōu)化器使用指定的索引運行查詢。這尤其適用于測試帶有多個索引的查詢性能。比如,下列查詢指定了用于該查詢的 gender 和 user_name 字段的索引:

>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

使用 $hint 來優(yōu)化上述查詢:

>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()

上一篇:限制記錄下一篇:概述