程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MongoDB數據庫 >> MongoDB基礎知識 >> MongoDB 覆蓋索引查詢

MongoDB 覆蓋索引查詢

編輯:MongoDB基礎知識

MongoDB 覆蓋索引查詢

官方的MongoDB的文檔中說明,覆蓋查詢是以下的查詢:

  • 所有的查詢字段是索引的一部分
  • 所有的查詢返回字段在同一個索引中

由於所有出現在查詢中的字段是索引的一部分, MongoDB 無需在整個數據文檔中檢索匹配查詢條件和返回使用相同索引的查詢結果。

因為索引存在於RAM中,從索引中獲取數據比通過掃描文檔讀取數據要快得多。


使用覆蓋索引查詢

為了測試蓋索引查詢,使用以下 users 集合:

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

我們在 users 集合中創建聯合索引,字段為 gender 和 user_name :

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

現在,該索引會覆蓋以下查詢:

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

也就是說,對於上述查詢,MongoDB的不會去數據庫文件中查找。相反,它會從索引中提取數據,這是非常快速的數據查詢。

由於我們的索引中不包括 _id 字段,_id在查詢中會默認返回,我們可以在MongoDB的查詢結果集中排除它。

下面的實例沒有排除_id,查詢就不會被覆蓋:

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

最後,如果是以下的查詢,不能使用覆蓋索引查詢:

  • 所有索引字段是一個數組
  • 所有索引字段是一個子文檔
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved