官方的 MongoDB 的文档中说明,覆盖查询是以下的查询:
由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。
因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。
为了测试盖索引查询,使用以下 mycol 集合:
{ "_id" : 1, "name" : "tom", "sex" : "男", "score" : 100, "age" : 34 }
{ "_id" : 2, "name" : "jeke", "sex" : "男", "score" : 90, "age" : 24 }
{ "_id" : 3, "name" : "kite", "sex" : "女", "score" : 40, "age" : 36 }
{ "_id" : 4, "name" : "herry", "sex" : "男", "score" : 90, "age" : 56 }
{ "_id" : 5, "name" : "marry", "sex" : "女", "score" : 70, "age" : 18 }
{ "_id" : 6, "name" : "john", "sex" : "男", "score" : 100, "age" : 31 }
我们在 mycol 集合中创建联合索引,字段为 sex 和 name :
db.mycol.ensureIndex({sex : 1, name : 1})
现在,该索引会覆盖以下查询:
db.mycol.find({sex: "男"},{name : 1, _id : 0})
也就是说,对于上述查询,MongoDB 的不会去数据库文件中查找。相反,它会从索引中提取数据,这是非常快速的数据查询。
由于我们的索引中不包括 _id 字段,_id 在查询中会默认返回,我们可以在 MongoDB 的查询结果集中排除它。
下面的实例没有排除 _id,查询就不会被覆盖:
db.mycol.find({sex: "男"},{name : 1})
最后,如果所有索引字段是一个数组,不能使用覆盖索引查询。
Redis Pttl 命令Redis key(键) Redis Pttl 命令以毫秒为单位返回 key 的剩余过期时间。语法 redis Pttl 命令基本语法如下:redis...
Redis Lpush 命令Redis 列表(List)Redis Lpush 命令将一个或多个值插入到列表头部。如果 key 不存在,一个空列表会被创建并执行 ...
Redis Srandmember 命令Redis 集合(Set)Redis Srandmember 命令用于返回集合中的一个随机元素。从 Redis 2.6 版本开始, Srandme...
Redis Zscan 命令 Redis 有序集合(sorted set) Redis Zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)语法 redis...