新聞中心
MongoDB 覆蓋索引查詢
官方的MongoDB的文檔中說明,覆蓋查詢是以下的查詢:

站在用戶的角度思考問題,與客戶深入溝通,找到海林網(wǎng)站設(shè)計與海林網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋海林地區(qū)。
- 所有的查詢字段是索引的一部分
- 所有的查詢返回字段在同一個索引中
由于所有出現(xiàn)在查詢中的字段是索引的一部分, MongoDB 無需在整個數(shù)據(jù)文檔中檢索匹配查詢條件和返回使用相同索引的查詢結(jié)果。
因為索引存在于RAM中,從索引中獲取數(shù)據(jù)比通過掃描文檔讀取數(shù)據(jù)要快得多。
使用覆蓋索引查詢
為了測試覆蓋索引查詢,使用以下 users 集合:
{
"_id": ObjectId("53402597d852426020000002"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
}
我們在 users 集合中創(chuàng)建聯(lián)合索引,字段為 gender 和 user_name :
>db.users.createIndex({gender:1,user_name:1})
注:5.0 之前版本可以使用 db.collection.ensureIndex() ,但 ensureIndex() 在 5.0 版本后已被移除,使用 createIndex() 代替。
現(xiàn)在,該索引會覆蓋以下查詢:
>db.users.find({gender:"M"},{user_name:1,_id:0})
也就是說,對于上述查詢,MongoDB的不會去數(shù)據(jù)庫文件中查找。相反,它會從索引中提取數(shù)據(jù),這是非??焖俚臄?shù)據(jù)查詢。
由于我們的索引中不包括 _id 字段,_id在查詢中會默認返回,我們可以在MongoDB的查詢結(jié)果集中排除它。
下面的實例沒有排除_id,查詢就不會被覆蓋:
>db.users.find({gender:"M"},{user_name:1})
最后,如果是以下的查詢,不能使用覆蓋索引查詢:
- 所有索引字段是一個數(shù)組
- 所有索引字段是一個子文檔
網(wǎng)站欄目:創(chuàng)新互聯(lián)MongoDB教程:MongoDB覆蓋索引查詢
本文鏈接:http://m.fisionsoft.com.cn/article/coeisgc.html


咨詢
建站咨詢
