三十八、MongoDB 覆盖索引查询
创始人
2025-05-28 04:16:08

因为所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果

因为索引存在于 RAM 中,从索引中获取数据比通过扫描文档读取数据要快得多

使用覆盖索引查询

为了测试盖索引查询,假设我们有以下 users 集合

{"_id" : ObjectId("59ee8a8ba0f7c7d445f864af"),"tel" : "13888886666","birthday" : "11-11","sex" : "M","name" : "Ro penglei","user_name" : "penglei"
}

我们在 users 集合中创建联合索引,字段为 sex 和 user_name

> db.users.ensureIndex({sex:1,user_name:1})
{"createdCollectionAutomatically" : false,"numIndexesBefore" : 1,"numIndexesAfter" : 2,"ok" : 1
}

现在,该索引会覆盖以下查询

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

也就是说,对于上述查询,MongoDB 不会去数据库文件中查找
相反,它会从索引中提取数据,这是非常快速的数据查询

由于我们的索引中不包括 _id 字段,_id在查询中会默认返回,我们可以在 MongoDB 的查询结果集中排除它

下面的范例没有排除_id,查询就不会被覆盖:

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

最后,如果是以下的查询,不能使用覆盖索引查询:

1、 所有索引字段是一个数组
2、 所有索引字段是一个子文档

相关内容

热门资讯

【文化中国行】“圈”出幸福感!... (来源:工人日报) 阅读提示 近年来,嘉兴市总工会以全总“559”部署和省总工会“137...
特色养殖“驮”起增收梦 投喂黑驴。本报记者 栾雨嘉 摄本报记者 栾雨嘉12月12日,黄南藏族自治州尖扎县措周乡俄什加村的肉驴...
内蒙古粮食产量达840.7亿斤 (来源:内蒙古日报)转自:内蒙古日报本报12月13日讯  (记者  韩雪茹)据12月12日国家统计局...
北疆楷模黄启东先进事迹报告会举... (来源:内蒙古日报)转自:内蒙古日报本报呼和浩特12月13日讯  (记者  皇甫秀玲)12月11日,...
全球最大储能电站在巴彦淖尔投运 (来源:内蒙古日报)转自:内蒙古日报本报巴彦淖尔12月13日电  (记者  薄金凤)12月12日,内...