`

【赵强老师】MongoDB中的索引(下)

阅读更多

(四)索引的类型三:复合索引(Compound Index)

MongoDB支持复合索引,即将多个键组合到一起创建索引。该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的情形。其次复合索引在使用的时候,也可以通过前缀法来使用索引。MongoDB中的复合索引与关系型数据库基本上一致。在关系型数据库中复合索引使用的一些原则同样适用于MongoDB。

在前面的内容中,我们已经在emp集合上创建了一个复合索引,如下:

db.emp.createIndex({"deptno":1,"sal":-1})

 

下面使用不同的过滤条件查询文档,查看相应的执行计划:

(1)仅使用deptno作为过滤条件

db.emp.find({"deptno":10}).explain()

 

(2)使用deptno、sal作为过滤条件

db.emp.find({"deptno":10,"sal":3000}).explain()

 

(3)使用deptno、sal作为过滤条件,但把sal放在前面

db.emp.find({"sal":3000,"deptno":10}).explain()

 

(4)仅使用sal作为过滤条件

db.emp.find({"sal":3000}).explain()

 

(五)复合索引与排序

复合索引创建时按升序或降序来指定其排列方式。对于单键索引,其顺序并不是特别重要,因为MongoDB可以在任一方向遍历索引。对于复合索引,按何种方式排序能够决定该索引在查询中能否被使用到。

db.emp.createIndex({"deptno":1,"sal":-1})

 

在前面的内容中,我们已经在deptno上按照升序、sal上按照降序建立了复合索引,下面测试不同的排序的下,是否执行了索引:

使用了索引的情况:
db.emp.find().sort({"deptno":1,"sal":-1}).explain()
db.emp.find().sort({"deptno":-1,"sal":1}).explain()

没有使用索引的情况:
db.emp.find().sort({"deptno":1,"sal":1}).explain()
db.emp.find().sort({"deptno":-1,"sal":-1}).explain()

交换两个列的位置,再进行测试。

 

(六)复合索引与索引前缀

索引前缀指的是复合索引的子集,假如存在如下索引:

db.emp.createIndex({"deptno":1,"sal":-1,"job":1})

那么就存在以下的索引前缀:
{"deptno":1}
{"deptno":1,"sal":-1}

 

在MongoDB中,下列查询过滤条件情形中,索引将会被使用到:

db.emp.find().sort({deptno:1,sal:-1,job:1}).explain()
db.emp.find().sort({deptno:1,sal:-1}).explain()
db.emp.find().sort({deptno:1}).explain()

 

下列查询过滤条件情形中,索引将不会被使用到:

db.emp.find().sort({deptno:1,job:1}).explain()
db.emp.find().sort({sal:-1,job:1}).explain()

 

 

(七)小结

  • 复合索引是基于多个键(列)上创建的索引
  • 复合索引在创建的时候可以为其每个键(列)来指定排序方法
  • 索引键列的排序方法影响查询在排序时候的操作,方向一致或相反的才能被匹配
  • 复合索引与前缀索引通常在匹配的情形下才能被使用

分享到:
评论

相关推荐

    10天掌握MongoDB

    MongoDB是一种流行的NoSQL数据库,它以其高性能、高可用性以及易扩展的特性在现代数据库系统中占据了一席之地。本文将从NoSQL的基础概念出发,逐步深入介绍MongoDB的核心特性、架构、安装、数据操作和管理等方面的...

    传智播客 赵强 Oracle课件

    在赵强老师的课程中,你可以学到以下几个重要的Oracle知识点: 1. **Oracle基础知识**:了解Oracle的历史、版本以及其在企业级应用中的重要性。学习数据库的概念、数据模型(如关系型模型)以及数据库管理系统...

    赵强老师的Oracle课件

    想要好好地学习Oracle数据库的朋友呀,你错过了她就太不值得了。里面有好多的Oracle操作命令可能你都没接触过吧。好了,话不多多说。坚信资料不错!你,值得拥有!OK.还有,之所有要你2分打赏,是我给了你这么好的...

    二年级数学生活中的大数赵强PPT课件.pptx

    今天,我们将与赵强老师一同探索数学领域的一个重要主题——“生活中的大数”。这个主题通过生动的例子和清晰的逻辑,帮助孩子们在日常生活中感知和理解大数的存在及其重要性。 “生活中有大数”,这不仅是一句简单...

    精通JSP编程 作者赵强 编

    精通JSP编程 作者赵强 编 12-18节

    精通JSP编程 作者赵强

    《精通JSP编程》是赵强先生的一部深入解析JSP技术的专业著作,该书针对JSP编程进行了全面且深入的讲解,旨在帮助读者掌握JSP的核心概念和技术,提升Web应用开发能力。根据提供的文件名列表,我们可以推测书籍的章节...

    Oracle学习笔记(传智播客 赵强)

    在Oracle数据库的学习中,SQL优化是一项至关重要的技能,因为它直接影响到数据库的性能和查询效率。...在实际工作中,结合索引优化、存储过程的使用以及适当的数据库设计,可以进一步提升系统性能。

    [1120][赵强精通JSP编程][37M]

    根据描述中的信息,可以通过以下几种方式获取赵强的《精通JSP编程》这本书的资料: - **下载地址**:提供了一个链接,虽然链接格式不正确,但可以通过修改后访问获取资料的网站。 - **作者联系方式**:提供了QQ号...

    二年级数学生活中的大数赵强PPT学习教案.pptx

    本文将针对一份面向二年级学生的数学学习教案进行解读,这份教案的标题为:“二年级数学生活中的大数赵强PPT学习教案”。 教案的核心目标是帮助孩子们理解并能够应用生活中的大数。课程内容不仅限于数学知识的传授...

    Oracle数据库赵强视频教程【3天】

    教程名称:Oracle 数据库赵强视频教程【3天】教程目录:【】Oracle安装与管理、SQL语句(赵强)【】Orcale存储过程jdbc与Orcale大文本操作等(赵强)【】SQL简单查询触发器视图(赵强)  资源太大,传百度网盘了,链接在...

    oracle 课件

    - **理论教学**:占培训内容的 50%,主要包括数据库基本概念、SQL 语言基础、表和索引的创建与管理等内容,通过文字和图片的形式进行讲解。 - **实践操作**:同样占据 50% 的比例,重点在于通过实际操作来加深理解,...

    day2013-0110-webLogic配置和集群(赵强).zip

    本资料包“day2013-0110-webLogic配置和集群(赵强).zip”包含了关于WebLogic的配置与集群搭建的详细教程,旨在帮助用户深入了解WebLogic的核心功能和管理技巧。 一、WebLogic基础配置 1. 安装与启动:首先,我们...

    LoadRunner性能测试巧匠训练营-完整版(带目录)-赵强邹伟伟

    《LoadRunner性能测试巧匠训练营》是一本深入讲解LoadRunner性能测试的教材,由赵强和邹伟伟两位专家共同编著。该资源提供的是完整版,且无需密码即可解压阅读,对于想要学习和提升LoadRunner性能测试技能的人来说,...

    教师年度优秀述职报告三篇.docx

    赵强老师在报告中说:“我积极参与教研活动,通过与同事们的交流与合作,不断反思和调整教学策略,促进了教学质量的整体提升。”他表达了对未来工作的期待,希望在新的学年中,能够继续发挥自己的专业特长,为学校的...

    java代码-46 赖赵强

    但我们可以推测,这份代码可能是赖赵强个人项目的一部分,或者是他在学习或工作中解决某个问题的代码片段。由于描述中未包含具体的技术点,我们无法直接了解其具体内容,需要通过查看实际的源代码来获取更多信息。 ...

    赵强_微信购物首页改版用户调研1

    首先,报告指出在主要的电商平台中,微信购物和京东APP的用户主要动机是寻找推荐商品和优惠信息,而无明确目的的闲逛用户相对较少。相比之下,淘宝APP的用户动机分布更为均衡,表明淘宝在满足用户多样化需求方面做得...

    信息存储技术的发展赵强.doc

    《信息存储技术的发展》 信息存储技术,作为信息技术的基石之一,从早期的岩画、古书,到现代的半导体、磁盘、光存储,再到先进的集群存储和虚拟化技术,其发展历程见证了人类社会的巨大变革。...

Global site tag (gtag.js) - Google Analytics