【MongoDB学习笔记21】MongoDB的复合索引
2015-01-08 21:48
471 查看
索引的值是按照一定顺序排列的,因此使用索引键对文档进行搜索排序比较快;但是只有首先使用索引进行排序时,索引才有用;
例如下面的排序里,“username”上的索引就没有起作用:
上面的命令中先根据age排序,在根据username排序,所以username作用并不大。为了优化这个排序,需要在age和username上建立索引:
这样就在users集合上建立了一个复合索引(compound index),复合索引就是一个建立在多个字段上的索引。
一、选择索引的方向
索引默认是升序的,在多索引查询的时候,可能需要让索引键的方向不同。例如:
年龄按照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}就不能作为索引来优化查询,意味着只能只能按照索引顺序来优化查询。
例如下面的排序里,“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}就不能作为索引来优化查询,意味着只能只能按照索引顺序来优化查询。
相关文章推荐
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- 【MongoDB学习笔记20】MongoDB的索引
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- CUBRID学习笔记 21 查看主键外键索引
- mongodb学习笔记之索引(转)
- MongoDB 学习笔记(四):索引
- 【MongoDB学习笔记22】MongoDB的索引管理
- mongodb 学习笔记 04 -- 游标、索引
- MongoDB 学习笔记(四):索引
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- 【MongoDB学习笔记27】MongoDB的TTL索引
- 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
- Mongodb的索引--学习笔记(未完)
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- MongoDB学习笔记(8)--索引及优化索引
- 【MongoDB学习笔记25】MongoDB的索引类型
- 【MongoDB学习笔记23】MongoDB的索引对象和数组
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- mongodb 学习笔记 04 -- 游标、索引
- MongoDB 学习笔记(五)索引