索引的值是按照一定顺序排列的,因此使用索引键对文档进行搜索排序比较快;但是只有首先使用索引进行排序时,索引才有用;

例如下面的排序里,“username”上的索引就没有起作用:

> db.users.find().sort({"age":1,"username":1})

上面的命令中先根据age排序,在根据username排序,所以username作用并不大。为了优化这个排序,需要在age和username上建立索引:

> db.users.ensureIndex({"age":1,"username":1})

这样就在users集合上建立了一个复合索引(compound index),复合索引就是一个建立在多个字段上的索引。

一、选择索引的方向

索引默认是升序的,在多索引查询的时候,可能需要让索引键的方向不同。例如:

> db.users.ensureIndex({"age":1,"username":-1})

或者

> db.users.ensureIndex({"age":-1,"username":1})

二者是等价的;

年龄按照0-9的顺序排序,在每个年龄分组中安装Z-A的顺序排列;或者用户名按照A-Z的顺利排序,在每个用户分组中按照9-0排序的。

二、使用隐式索引

复合索引在对不同的查询可以表现为不同的索引。如果有一个{"age":1,"username":1}索引,age字段会自动被排序,好似有个{“age”:1}的索引;

可以推论,如果有{“a”:1,”b”:1……..”z”:1}的索引,就会有{“a”:1},{“a”:1,”b”:1},{“a”:1,”b”:1,“c”:1}….一系列的索引;

但是,{“b”:1}或者{”b”:1,“c”:1}就不能作为索引来优化查询,意味着只能只能按照索引顺序来优化查询。

转载于:https://blog.51cto.com/281816327/1600866

【MongoDB学习笔记21】MongoDB的复合索引相关推荐

  1. MongoDB学习笔记(一) MongoDB介绍及安装

    系列目录 MongoDB学习笔记(一) MongoDB介绍及安装     MongoDB学习笔记(二) 通过samus驱动实现基本数据操作     MongoDB学习笔记(三) 在MVC模式下通过Jq ...

  2. MongoDB学习笔记(七)——MongoDB shell方法汇总

    在写前面的博文的时候,我发现MongoDB shell提供了很多方法,其中MongoDB的很多方法也在其中,下面是我从MongoDB官网上查到的所有MongoDB shell的所有方法,当然,我不会对 ...

  3. MongoDB学习笔记之MongoDB数据模型

    一.BSON协议与数据类型 JSON介绍 JSON是当今非常通用的一种跨语言Web数据交互格式,属于ECMAScript标准规范的一个子集.JSON(JavaScript Object Notatio ...

  4. MongoDB学习笔记—02 MongoDB入门

    Mongodb的基本概念 文档:是MongoDB中数据的基本单元,类似于关系型数据库中的行. 集合:多个文档组成一个集合,类似于关系型数据库中的表. 数据库:MongoDB的当个实例可以容纳多个独立的 ...

  5. PHP操作MongoDB学习笔记

    PHP操作MongoDB技術總結 <?php /** * PHP操作MongoDB学习笔记 */ //************************* //**   连接MongoDB数据库  ...

  6. MongoDB学习笔记(四)--索引 性能优化

    索引                                                                                             基础索引 ...

  7. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  8. MongoDB学习笔记(四)使用Java进行实时监控与数据收集(空间使用量、连接数)

    目录: MongoDB学习笔记(一)环境搭建与常用操作 MongoDB学习笔记(二)使用Java操作MongoDB MongoDB学习笔记(三)使用Spring Data操作MongoDB Mongo ...

  9. MongoDB 学习笔记八 复制、分片、备份与恢复、监控

    MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...

最新文章

  1. wex5 教程 之 图文讲解 智能数据库设计 之(1) 触发器
  2. python画图程序-python画图之“小海龟”turtle
  3. 从jquery源码中学习一些技巧
  4. springboot token_Springboot接口幂等性基于token实现方案
  5. 《四世同堂》金句摘抄(八)
  6. 近似算法的近似率_选择最佳近似最近算法的数据科学家指南
  7. element-UI框架使用validate.js的form校验规则(+自定义验证代码)- 应用篇
  8. 使用过这么多年Hibernate,对底层原理你知多少?
  9. pytorch学习笔记(十九):二维卷积层
  10. SQL格式化流水号位数
  11. java如何实现容器_Java的容器都有哪些,怎么实现的
  12. win10设置mysql环境变量
  13. 短视频素材:17个视频网站,涨粉必上热门
  14. 【开发模板】Vue和SpringBoot的前后端分离开发模板
  15. 俞伯牙摔琴谢知音的故事
  16. 直播加热是什么意思?抖音直播加热方法有哪些?
  17. iphone与android共享位置,苹果手机,相互始终共享位置了以后,查看不了对方的位置...
  18. 阿里云购买服务器、域名
  19. React 入门教程笔记
  20. Listary 关键字批量添加,代码分享

热门文章

  1. Scanner类+Random
  2. ssl 的jks 生成工具
  3. [Shell] swoole_timer_tick 与 crontab 实现定时任务和监控
  4. 【翻译】在Ext JS和Sencha Touch中创建自己定义布局
  5. XHTML标签的嵌套规则
  6. (转)剖析Delphi中的构造和析构
  7. 进行有效编辑的七种习惯
  8. 数据库系统原理(第5章:数据库编程)
  9. DataTable 转为ListT集合
  10. SynchronizationContext