(四)索引的类型三:复合索引(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()

(七)小结

  • 复合索引是基于多个键(列)上创建的索引

  • 复合索引在创建的时候可以为其每个键(列)来指定排序方法

  • 索引键列的排序方法影响查询在排序时候的操作,方向一致或相反的才能被匹配

  • 复合索引与前缀索引通常在匹配的情形下才能被使用

go mongodb排序查询_【赵强老师】MongoDB中的索引(下)相关推荐

  1. go mongodb排序查询_「赵强老师」MongoDB中的索引(下)

    (四)索引的类型三:复合索引(Compound Index)** MongoDB支持复合索引,即将多个键组合到一起创建索引.该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的 ...

  2. go mongodb排序查询_《MongoDB》day two

    Mongodb的更新方式有? db.集合名.update() 函数:用于更新已存在的文档. 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...

  3. oracle select 行数据_【赵强老师】什么是Oracle的数据字典?

    欢迎关注赵强老师微信公众号:myitshare 数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一 ...

  4. 【赵强老师】SQL的排序

    ​大家好好看看视频,尽管order by子句很简单,但是在使用的时候还是需要注意一些问题. [赵强老师]SQL的排序 在Oracle中,表中是以非指定顺序存储行数据记录的,它不管行插入数据库的顺序如何 ...

  5. oracle 锁表如何查看_【赵强老师】第一个Oracle的手工备份和恢复

    欢迎关注赵强老师微信公众号:myitshare 一.什么是手工管理的备份与恢复? 尽管在Oracle中,已经有了RMAN的备份与恢复.但是作为Oracle备份恢复的一种方式,我们将在本文中通过一个例子 ...

  6. 【赵强老师】SQL中的子查询

    ​先看视频,视频全长73分钟,相信对大家有帮助. [赵强老师]SQL中的子查询 这里主要向大家介绍了Oracle数据库之Oracle子查询之简单子查询,通过具体的内容向大家展现,希望对大家学习Orac ...

  7. hprof文件分析工具_【赵强老师】如何分析Java的内存溢出问题

    欢迎关注赵强老师微信公众号:myitshare 一.什么是内存溢出? 内存溢出(OOM:out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你 ...

  8. redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅

    欢迎关注赵强老师微信公众号:myitshare Redis 作为一个publish/subscribe server,起到了消息路由的功能.订阅者可以通过subscribe和psubscribe命令向 ...

  9. 【赵强老师】大数据平台的整体架构

    先看视频. [赵强老师]大数据平台的整体架构 大数据平台中的主要组件,如下: HDFS(Hadoop分布式文件系统) 源自于Google的GFS论文,发表于2003年10月,HDFS是GFS的山寨版. ...

最新文章

  1. library not found for -lAPOpenSdk解决方案
  2. python用psf函数_Python 嵌套函数(高级用法)
  3. java监控数据库的增量_【安德鲁斯】基于脚本的数据库quot;增量更新quot;,如果不改变,每次更新java代码、!...
  4. 公众号知道我浏览他吗_公众号可以看到访客吗,公众号怎么看到访客
  5. 缺陷调研报告_质量零缺陷 | 打造极致产品的质量管理之道
  6. git 命令行忽略提交_git命令入门(本地仓库)
  7. 中国电信建成全球首个覆盖最广的商用下一代物联网
  8. Give root password for maintenance (Or press Control-D to continue)
  9. 1.0版走迷宫小游戏(C++)
  10. ElasticJob定时任务学习总结
  11. 浅谈游戏辅助程序的制作 【经典】
  12. buctoj周赛14
  13. 你应该如何学习一个未知的技术领域?- 菜鸟小白篇
  14. Web Push功能使用
  15. 数据库的故障及其恢复策略
  16. Linux操作系统各发行版ISO镜像下载
  17. arcgis栅格缺值填补
  18. 1:Android Studio开发蓝牙上位机--环境搭建
  19. 简单的分布式矩阵乘法
  20. 农行k宝输入密码黑屏解决方法

热门文章

  1. LeetCode Compare Version Numbers(版本比较)
  2. 使用freemarker插入多行数据到word中
  3. 9.Methods(二)
  4. 正则表达式之 测试阶段
  5. 从Swap函数谈加法溢出问题
  6. Corona按钮只能让点击一次
  7. ASP.NET弹出一个对话框
  8. CSDN的Markdown编辑器常用语句
  9. CloudStack的基本使用
  10. 匹配月份_5月份轿车销量榜单出炉 雅阁热销18634辆