在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(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ù)庫
固定集合
關(guān)系
聚合
自動增長
復(fù)制
限制記錄
部署
分片
正則表達(dá)式
原子操作

覆蓋索引查詢

何為覆蓋查詢

在每一個 MongoDB 官方文檔中,覆蓋查詢都具有以下兩個特點:

  • 查詢中的所有字段都屬于一個索引;
  • 查詢所返回的所有字段也都屬于同一索引內(nèi)。

既然查詢中的所有字段都屬于一個索引,MongoDB 就會利用同一索引,匹配查詢集合并返回結(jié)果,而不需要實際地查看文檔。因為索引存在于 RAM 中,從索引中獲取數(shù)據(jù)要比通過掃描文檔獲取數(shù)據(jù)快得多。

使用覆蓋查詢

為了測試覆蓋查詢,假設(shè)在一個 users 集合中包含下列文檔:

{
   "_id": ObjectId("53402597d852426020000002"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

下面我們將為 users 集合中的 genderuser_name 字段創(chuàng)建一個符合索引。使用下列查詢:

>db.users.ensureIndex({gender:1,user_name:1})

這一索引將覆蓋下列查詢:

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

也就是說,對于上面的查詢,MongoDB 不會去查看文檔,轉(zhuǎn)而從索引數(shù)據(jù)中獲取所需的數(shù)據(jù),這顯然要快得多。

既然索引不包含 _id 字段,那么當(dāng)查詢中默認(rèn)返回 _id 時,我們可以在 MongoDB 的查詢結(jié)果集中將其排除掉。下面的查詢就不會被覆蓋。

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

最后,需要記住的是,如果出現(xiàn)下列情況,索引不能覆蓋查詢:

  • 索引字段是數(shù)組
  • 索引字段是子文檔
上一篇:Rockmongo 管理工具下一篇:插入文檔