复合索引(Compound Indexes)指一个索引包含多个字段,用法和单键索引基本一致。使用复合索引时要注意字段的顺序,如下添加一个name和age的复合索引,name正序,age倒序,document首先按照name正序排序,然后name相同的document按age进行倒序排序。mongoDB中一个复合索引最多可以包含32个字段。

1 准备测试数据

db.userinfos.insertMany([{_id:1, name: "张三", age: 23,level:10, ename: { firstname: "san", lastname: "zhang"}, roles: ["vip","gen" ]},{_id:2, name: "李四", age: 24,level:20, ename: { firstname: "si", lastname: "li"}, roles:[ "vip" ]},{_id:3, name: "王五", age: 25,level:30, ename: { firstname: "wu", lastname: "wang"}, roles: ["gen","vip" ]},{_id:4, name: "赵六", age: 26,level:40, ename: { firstname: "liu", lastname: "zhao"}, roles: ["gen"] },{_id:5, name: "田七", age: 27, ename: { firstname: "qi", lastname: "tian"}, address:'北京' },{_id:6, name: "周八", age: 28,roles:["gen"], address:'上海' }
]);

新建索引,用explain查看执行计划

//添加复合索引,name正序,age倒序
db.userinfos.createIndex({ "name": 1, "age": -1 })
//过滤条件为name,或包含name的查询会使用索引(索引的第一个字段),以下都会用到索引
db.userinfos.find({ name: '张三' }).explain()
db.userinfos.find({ name: "张三", level: 10 }).explain()
db.userinfos.find({ name: "张三", age: 23 }).explain()//查询条件为age时,不会使用上边创建的索引,而是使用的全表扫描
db.userinfos.find({ age: 23 }).explain()

mongodb索引---复合索引相关推荐

  1. 【MongoDB学习笔记21】MongoDB的复合索引

    索引的值是按照一定顺序排列的,因此使用索引键对文档进行搜索排序比较快:但是只有首先使用索引进行排序时,索引才有用: 例如下面的排序里,"username"上的索引就没有起作用: & ...

  2. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所有数据行(index all rows in a level)

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所有数据行(index all rows in a level) 目录

  3. pandas索引复合索引dataframe数据、索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value).使用元组tuple表达复合索引的指定行 目 ...

  4. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所特定数据行、指定数据行(index a row of a level)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所特定数据行.指定数据行(index a row of a level).使用元组tuple表达复合索引的指定行 目录

  5. pandas索引复合索引dataframe数据、索引其中多个水平(level)的多个数据行(index rows from different levels)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中多个水平(level)的多个数据行(index rows from different levels and combine).使用元组tupl ...

  6. pandas索引复合索引dataframe数据、索引其中一个水平(level)的特定数据列(index a column of a level)

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的特定数据列(index a column of a level) 目录

  7. Pandas中xs()函数索引复合索引数据的不同切面数据(索引复合索引中需要的数据):索引列复合索引中的一个切面、索引行复合索引中的一个切面

    Pandas中xs()函数索引复合索引数据的不同切面数据(索引复合索引中需要的数据):索引列复合索引中的一个切面.索引行复合索引中的一个切面 目录

  8. MySQL 性能分析 之 联合索引(复合索引)实践分析

    MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...

  9. 【推荐】mysql联合 索引(复合索引)的探讨

    Mysql联合 索引(复合索引)的使用原则 命名规则:表名_字段名 需要加索引的字段,要在where条件中. 数据量少的字段不需要加索引.最窄的字段放在键的左边. 如果where条件中是OR关系,必须 ...

最新文章

  1. shell中引号的使用方法
  2. photoshop CS不能打字,出现死机等现象的解决办法!!
  3. Qtum量子链受邀出席日本早稻田研究所区块链教育讲座
  4. Comparison of video container formats
  5. Windows 10系统下 MySql 5.7 my.ini 位置
  6. 一、Linear Regression
  7. linux下的C语言开发(进程创建)
  8. 算法导论 思考题9-2
  9. Android自己写的三款实用开关控件
  10. Go Slice 高级实践
  11. 向已知EXCEL模板写入数据并导出
  12. 拼多多店铺等级怎么提升?店盈通来告诉你
  13. 信息系统项目管理师自学笔记(二十二)—— 网络应用与管理
  14. java源码app,飞飞CMS双端JAVA原生APP源码
  15. 简述cookie增删改查的函数封装
  16. 如何使用PTGUI全景合成软件进行照片拼接
  17. 计算机三级网络技术最全知识点总结三
  18. Web安全-网页开发者工具
  19. cadence学习资料整理
  20. 正则表达式匹配非某字符串的情况

热门文章

  1. 物联网给人类带来的潜在生命危险,我们必须重视起来
  2. PostgreSQL操作-psql基本命令
  3. js数组有最大长度吗?
  4. 微信小程序之bindtap事件传参
  5. 极客日报第 64 期:抖音否认封杀腾讯;程序员拒绝带电脑回家被开除,获赔 19.4 万;微软称 Excel 是编程语言...
  6. LUA语言学习教程(转)
  7. java迭代器_java 迭代器
  8. (Java)word转pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)导出
  9. python如何测试仪器_Python中的测试工具
  10. Java面试复习总结(Mysql篇9)——MySQL里的那些日志