MongoDB-索引
2013-01-31 11:01
190 查看
1. MongoDB索引
MongoDB索引的概念与关系型数据库的索引是一样的,索引就是用来加速查询的。
2. 建立索引的方法
其中传递给ensureIndex的文档形式中,一组值为1或-1的键,表示索引创建的方向。
3. 建立索引时考虑的问题
(1) 会做什么样的查询?其中哪些键需要索引?
(2) 每个键的索引方向是怎么样的?
(3) 如何应对扩展?有没有种不同的键的排列可以使常用数据更多地保留在内存中?
4. 唯一索引
创建唯一索引的方式如下:
若希望将所有包含重复值的文档都删掉,dropDups选项可以保留发现的第一个文档。例如:
5. 使用explain和hint
explain工具可以得到查询细节,包括本次查询调用了哪些索引,所用时长等。
explain会返回一个文档,而不是游标本身。用法如下:
当一个集合中存在复合索引时,假设已经有{“username” : 1,“age” : 1}和{“age” : 1,”username” : 1}的索引了,查询如下:
查询细节中显示数据库自动使用了{“username” : 1, “age” : 1}索引。原因是这里的查询要求的是精确匹配用户名,但年龄匹配的是范围,所以MongoDB的查询优化器会智能地替你选择该用哪个索引。当然可以使用hint强制使用某个索引,用法如下:
但多数情况下这种指定都没什么必要。
6. MongoDB的索引管理
索引的元信息存储在每个数据库的system.indexes集合(系统保留集合)中,不能对其插入或者删除文档,操作只能通过ensureIndex或者dropIndexes进行。
同时system.namespaces集合也含有索引的名字,查看这个集合的内容,会发现其他的集合在这里至少有两个文档与之对应,一个对应集合本身,一个对应集合包含的索引。例如只有标准的“_id”索引的集合,system.namespaces中对应的内容如下:
MongoDB索引的概念与关系型数据库的索引是一样的,索引就是用来加速查询的。
2. 建立索引的方法
1 >db.people.ensureIndex({“username” : 1})
其中传递给ensureIndex的文档形式中,一组值为1或-1的键,表示索引创建的方向。
3. 建立索引时考虑的问题
(1) 会做什么样的查询?其中哪些键需要索引?
(2) 每个键的索引方向是怎么样的?
(3) 如何应对扩展?有没有种不同的键的排列可以使常用数据更多地保留在内存中?
4. 唯一索引
创建唯一索引的方式如下:
1 >db.people.ensureIndex({“username” : 1}, {“unique” : true})
若希望将所有包含重复值的文档都删掉,dropDups选项可以保留发现的第一个文档。例如:
1 >db.people.ensureIndex({“username” : 1}, {“unique” : true}, {“dropDups” : true})
5. 使用explain和hint
explain工具可以得到查询细节,包括本次查询调用了哪些索引,所用时长等。
explain会返回一个文档,而不是游标本身。用法如下:
1 >db.foo.find().explain()
当一个集合中存在复合索引时,假设已经有{“username” : 1,“age” : 1}和{“age” : 1,”username” : 1}的索引了,查询如下:
1 >db.c.find({“age” : {$gt : 10}, ”username” : “sally”}).explain()
查询细节中显示数据库自动使用了{“username” : 1, “age” : 1}索引。原因是这里的查询要求的是精确匹配用户名,但年龄匹配的是范围,所以MongoDB的查询优化器会智能地替你选择该用哪个索引。当然可以使用hint强制使用某个索引,用法如下:
1 >db.c.find({“age” : 14, “username” : /.*/}).hint({“username” : 1, “age” : 1})
但多数情况下这种指定都没什么必要。
6. MongoDB的索引管理
索引的元信息存储在每个数据库的system.indexes集合(系统保留集合)中,不能对其插入或者删除文档,操作只能通过ensureIndex或者dropIndexes进行。
同时system.namespaces集合也含有索引的名字,查看这个集合的内容,会发现其他的集合在这里至少有两个文档与之对应,一个对应集合本身,一个对应集合包含的索引。例如只有标准的“_id”索引的集合,system.namespaces中对应的内容如下:
1 {“name” : “test.foo”} 2 3 {“name” : “test.foo.,$_id_”}
相关文章推荐
- MongoDB TTL索引的实例详解
- mongodb建索引的策略
- MongoDB特殊的索引和集合
- MongoDB 索引
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- 10gen工程师谈MongoDB组合索引的优化
- 8天学通MongoDB——第四天 索引操作
- 10gen工程师谈MongoDB组合索引的优化
- mongodb处理中文索引和查找字符串
- 深入理解MongoDB的复合索引
- MongoDB 索引
- Mongodb基本操作入门,增删改查和索引
- 菜鸟的mongoDB学习---(六)MongoDB 索引
- Solr从Mongodb索引数据(上
- 【MongoDB学习笔记22】MongoDB的索引管理
- 【MongoDB学习笔记27】MongoDB的TTL索引
- 第五章 MongoDb索引优化 5.4
- MongoDB大表建索引,出现一些问题
- mongodb索引
- 四天学会mongoDB (第四天 索引操作)