开心档 - 软件开发入门之 MongoDB 覆盖索引查询
作者简介:每天分享https://www.infoq.cn/profile/371C387AEB0C15/publish的学习经验、和学习笔记。
座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。
前言
本章将会讲解MongoDB 覆盖索引查询
目录
官方的 MongoDB 的文档中说明,覆盖查询是以下的查询:
所有的查询字段是索引的一部分
所有的查询返回字段在同一个索引中
由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。
因为索引存在于 RAM 中,从索引中获取数据比通过扫描文档读取数据要快得多。
使用覆盖索引查询
为了测试覆盖索引查询,使用以下 users 集合:
复制代码
我们在 users 集合中创建联合索引,字段为 gender 和 user_name :
复制代码
**注:**5.0 之前版本可以使用 db.collection.ensureIndex() ,但 ensureIndex() 在 5.0 版本后已被移除,使用 createIndex() 代替。
现在,该索引会覆盖以下查询:
复制代码
也就是说,对于上述查询,MongoDB 的不会去数据库文件中查找。相反,它会从索引中提取数据,这是非常快速的数据查询。
由于我们的索引中不包括 _id 字段,_id 在查询中会默认返回,我们可以在 MongoDB 的查询结果集中排除它。
下面的实例没有排除_id,查询就不会被覆盖:
复制代码
最后,如果是以下的查询,不能使用覆盖索引查询:
所有索引字段是一个数组 所有索引字段是一个子文档
评论