go mongodb排序查询_【赵强老师】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()
(七)小结
复合索引是基于多个键(列)上创建的索引
复合索引在创建的时候可以为其每个键(列)来指定排序方法
索引键列的排序方法影响查询在排序时候的操作,方向一致或相反的才能被匹配
复合索引与前缀索引通常在匹配的情形下才能被使用
go mongodb排序查询_【赵强老师】MongoDB中的索引(下)相关推荐
- go mongodb排序查询_「赵强老师」MongoDB中的索引(下)
(四)索引的类型三:复合索引(Compound Index)** MongoDB支持复合索引,即将多个键组合到一起创建索引.该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的 ...
- go mongodb排序查询_《MongoDB》day two
Mongodb的更新方式有? db.集合名.update() 函数:用于更新已存在的文档. 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...
- oracle select 行数据_【赵强老师】什么是Oracle的数据字典?
欢迎关注赵强老师微信公众号:myitshare 数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一 ...
- 【赵强老师】SQL的排序
大家好好看看视频,尽管order by子句很简单,但是在使用的时候还是需要注意一些问题. [赵强老师]SQL的排序 在Oracle中,表中是以非指定顺序存储行数据记录的,它不管行插入数据库的顺序如何 ...
- oracle 锁表如何查看_【赵强老师】第一个Oracle的手工备份和恢复
欢迎关注赵强老师微信公众号:myitshare 一.什么是手工管理的备份与恢复? 尽管在Oracle中,已经有了RMAN的备份与恢复.但是作为Oracle备份恢复的一种方式,我们将在本文中通过一个例子 ...
- 【赵强老师】SQL中的子查询
先看视频,视频全长73分钟,相信对大家有帮助. [赵强老师]SQL中的子查询 这里主要向大家介绍了Oracle数据库之Oracle子查询之简单子查询,通过具体的内容向大家展现,希望对大家学习Orac ...
- hprof文件分析工具_【赵强老师】如何分析Java的内存溢出问题
欢迎关注赵强老师微信公众号:myitshare 一.什么是内存溢出? 内存溢出(OOM:out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你 ...
- redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅
欢迎关注赵强老师微信公众号:myitshare Redis 作为一个publish/subscribe server,起到了消息路由的功能.订阅者可以通过subscribe和psubscribe命令向 ...
- 【赵强老师】大数据平台的整体架构
先看视频. [赵强老师]大数据平台的整体架构 大数据平台中的主要组件,如下: HDFS(Hadoop分布式文件系统) 源自于Google的GFS论文,发表于2003年10月,HDFS是GFS的山寨版. ...
最新文章
- library not found for -lAPOpenSdk解决方案
- python用psf函数_Python 嵌套函数(高级用法)
- java监控数据库的增量_【安德鲁斯】基于脚本的数据库quot;增量更新quot;,如果不改变,每次更新java代码、!...
- 公众号知道我浏览他吗_公众号可以看到访客吗,公众号怎么看到访客
- 缺陷调研报告_质量零缺陷 | 打造极致产品的质量管理之道
- git 命令行忽略提交_git命令入门(本地仓库)
- 中国电信建成全球首个覆盖最广的商用下一代物联网
- Give root password for maintenance (Or press Control-D to continue)
- 1.0版走迷宫小游戏(C++)
- ElasticJob定时任务学习总结
- 浅谈游戏辅助程序的制作 【经典】
- buctoj周赛14
- 你应该如何学习一个未知的技术领域?- 菜鸟小白篇
- Web Push功能使用
- 数据库的故障及其恢复策略
- Linux操作系统各发行版ISO镜像下载
- arcgis栅格缺值填补
- 1:Android Studio开发蓝牙上位机--环境搭建
- 简单的分布式矩阵乘法
- 农行k宝输入密码黑屏解决方法