MongoDB 覆盖索引查询

官方的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 }

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

db.mycol.ensureIndex({sex : 1, score : 1})

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

db.mycol.find({sex: '男'},{name : 1, _id : 0})

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

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

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

db.mycol.find({sex: '男'},{name : 1})

最后,如果所有索引字段是一个数组,不能使用覆盖索引查询。

 


MongoDB 覆盖索引查询相关推荐

  1. linux select读取节点数据失败_MySQL中覆盖索引查询和select*查询执行结果案例分析...

    索引优化建议 在MySQL中要尽可能使用覆盖索引进行检索,只访问索引的查询(索引列和查询列一致),减少select * 可提高查询效率 覆盖索引(Covering Index) 理解方式一: 就是se ...

  2. SQL Server 查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化--覆盖索引(一)  中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...

  3. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  4. sql server修改索引名称_【索引潜规则】覆盖索引、ICP、MRR详解

    点击上方蓝色字体,关注我们 上篇文章我们说了创建索引的方法,有聚簇索引.辅助索引.前缀索引.联合索引等,也说了如何利用索引的排序功能,接着本篇文章主要来说一说索引的几种优化策略,首先我们先说下回表的概 ...

  5. MySQL 覆盖索引

    本文主要概述mysql的覆盖索引,以及几种常见的优化场景 内容概要 聚集索引和辅助索引 什么是覆盖索引 几种优化场景 总体建议 聚集索引和辅助索引 聚集索引(主键索引) -innodb存储引擎是索引组 ...

  6. mysql高效索引之覆盖索引

    概念 如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作 判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引 ...

  7. mysql延迟关联为什么快_MySQL 覆盖索引与延迟关联详解

    本期来谈谈覆盖索引与延迟关联.在此之前,我们先简单建立一个订单表 Orders 用于举例说明.表中共包含 3 个字段: id int product_id name CREATE TABLE `ord ...

  8. mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联

    延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据. 为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针? 如果存的是物理地址指针不就不 ...

  9. mysql高效索引覆盖索引_MySQL高效索引:覆盖索引

    原标题:MySQL高效索引:覆盖索引 作者:踏雪无痕 cnblogs.com/chenpingzhao/p/4776981.html 概念 如果索引包含所有满足查询需要的数据,则该索引称为覆盖索引(C ...

  10. 覆盖索引与联合索引_Mysql性能优化:为什么要用覆盖索引?

    相信读者看过很多MYSQL索引优化的文章,其中有很多优化的方法,比如最佳左前缀,覆盖索引等方法,但是你真正理解为什么要使用最佳左前缀,为什么使用覆盖索引会提升查询的效率吗? 本篇文章将从MYSQL内部 ...

最新文章

  1. Servlet 2.0 Servlet 3.0 新特性
  2. 为什么LINKBUTTON不能插在LTEMTEMPLATE里???
  3. 你需要知道的12个Git高级命令
  4. Apache代理80端口
  5. sql express 无法启动服务_在Windows2012下安装SQL Server 2005无法启动服务的解决办法...
  6. IDEA: .java文件和.class不一致
  7. 应用zip压缩的javascript以及Egret H5游戏实战
  8. servlet技术是否过时
  9. C#调用Microsoft.DirectX.DirectSound问题记录及解决
  10. 关于ftp的被动模式与IPTABLES策略
  11. paip. sip module implements API v10.0 to v10.1 but the PyQt4.QtCore module requires API v9.2
  12. 微博表情插入mysql数据库,表情都是四字节字符
  13. html+css+javascript实现抖音超火罗盘时钟 (免费附源码)
  14. xposed框架安装使用教程(第一篇)
  15. 如何把手机证件照压缩到15KB?手机压缩图片方法
  16. Android中英文切换
  17. python学习之心路历程
  18. 致电电信索要公网ip地址,如何判断自己属于公网ip地址
  19. Project Server 2016 部署
  20. 用 Dev-C++ 编写简单的走迷宫小游戏

热门文章

  1. MapReduce运行流程分析
  2. dom4j解析XML文件,通过属性查找节点,出现异常
  3. jQuery1.3以上版本@的问题
  4. echarts中的option.legend.data has not been defined.
  5. Failed to run the WC DB work queue associated with 错误的解决
  6. 没想到,我能这么细心地看算法
  7. DataSetProvider的Option属性
  8. 类似于Function.bind的dojo.hitch --dojo Quick Start/dojo入门手册4
  9. 亚马逊在中国失败,而中国却在亚马逊成功
  10. 谷歌全新OS曝光:它是操作系统世界里一种全新的艺术