MongoDB中的索引的操作
MongoDB中的索引的操作
MongoDB中的索引的操作索引通常能够极大的提高查询的效率。在系统中使用查询时,应该考虑建立相关的索引。在MongoDB中创建索引相对比较容易。
索引是一种数据结构,他搜集一个集合中文档特定字段的值。MongoDB的查询优化器能够使用这种数据结构来快速的对集合(collection)中的文档(collection)进行寻找和排序.准确来说,这些索引是通过B-Tree索引来实现的。
一、建立索引
1.单列索引
在字段x上创建索引,1 (ascending) or -1 (descending)
> db.data.ensureIndex({x:1})
2、组合索引
-- 数字1表示username键的索引按升序存储,-1表示age键的索引按照降序方式存储。 > db.test.ensureIndex({"username":1, "age":-1})
3、默认索引
对于每一个集合(除了capped集合),默认会在_id字段上创建索引,而且这个特别的索引不能删除。_id字段是强制唯一的,由数据库维护。
4、嵌套关键字
在MongoDB中,甚至能够在一个嵌入的文档上(embedded)建立索引.
> db.things.ensureIndex({"address.city":1})5、唯一索引
MongoDB支持唯一索引,这使得不能插入在唯一索引项上已经存在的记录。例如,要保证firstname和lastname都是唯一的,命令如下
> db.things.ensureIndex({firstname:1,lastname:1},{unique:true})
二、可以通过下面的名称查看索引是否已经成功建立:
> db.test.getIndexes()
三、删除索引的命令是:
> db.test.dropIndex({"username":1})
四、缺失的键
当一个文档以唯一索引的方式保存到集合中去的时候,任何缺失的索引字段都会一null值代替,因此,不能在唯一索引上同时插入两条缺省的记录。如下:
>db.things.ensureIndex({firstname: 1}, {unique: true}); >db.things.save({lastname: "Smith"}); >db.things.save({lastname: "Jones"});-- 会产生错误,因为firstname会有两个null.
五、重复值:
唯一索引不能够创建在具有重复值的键上,如果你一定要在这样的键上创建,那么想系统将保存第一条记录,剩下的记录会被删除,只需要在创建索引的时候加上dropDups这个可选项即可
>db.things.ensureIndex({firstname : 1}, {unique : true, dropDups : true})
六、重建索引:
可以所用如下命令重建索引:
db.myCollection.reIndex()
// same as:
db.runCommand( { reIndex : 'myCollection' } )
通常这是不必要的,但是在集合的大小变动很大及集合在磁盘空间上占用很多空间时重建索引才有用。对于大数据量的集合来说,重建索引可能会很慢。
七、需要注意的地方:
MongoDB中索引是大小写敏感的。
当更新对象是,只有在索引上的这些key发生变化时才会更新。着极大地提高了性能。当对象增长了或者必须移动时,所有的索引必须更新,这回很慢 。
索引信息会保存在system.indexes 集合中,运行 db.system.indexes.find() 能够看到这些示例数据。
索引的字段的大小有最大限制,目前接近800 bytes. 可在大于这个值的字段上建立索引是可以的,但是该字段不会被索引,这种限制在以后的版本中可能被移除。
八、索引的性能
索引使得可以通过关键字段获取数据,能够使得快速查询和更新数据。
但是,必须注意的是,索引也会在插入和删除的时候增加一些系统的负担。往集合中插入数据的时候,索引的字段必须加入到B-Tree中去,因此,索引适合建立在读远多于写的数据集上,对于写入频繁的集合,在某些情况下,索引反而有副作用。不过大多数集合都是读频繁的集合,所以集合在大多数情况下是有用的。
九、使用sort()而不需要索引
如果数据集合比较小(通常小于4M),使用sort()而不需要建立索引就能够返回数据。在这种情况下,做好联合使用limit()和sort()。
关于MongoDB索引的创建和使用就介绍到这里,希望能对各位有所帮助,您的收获将是我最大的快乐!
您可能感兴趣
- mongodb连接池
- Mongodb数据导入导出
- MongoDB的where查询
- 什么是mongodb 固定集合
- mongodb简单介绍和安装
- mongodb查询
- mongodb insert操作
- MongoDB的连接字符串
- python mongodb 基本操作(Python使用pymongo库操作MongoDB数据库的方法实例)
- linuxmongodb安装路径(Linux安装MongoDB启动及常见问题解决)
- mongodb可视化工具
- mongodb用户权限
- MongoDB 日志文件太大
- mongodb中mapreduce实例
- mongodb objectid类型
- mongodb distinct去重
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
热门推荐
- SQL Server锁类型
- mysql简单查询基本语句(详解MySQL 查询语句的执行过程)
- sparksql的string转日期格式(将string类型的数据类型转换为spark rdd时报错的解决方法)
- mysqldump 命令详解(mysqldump你可能不知道的参数)
- tomcat解决乱码(解决tomcat 静态页面html中文乱码的解决终极篇)
- sqlserver日志被删除(sql server日志处理不当造成的隐患详解)
- svn查看某个用户的提交记录
- docker 启动rabbitmq(docker安装rabbitmq无法进入管理页面的问题)
- docker安装java8(docker安装java环境的实现步骤)
- 怎么修改dede标签内容(用数据库批量修改替换dedecms文章标题和内容的步骤分享[图文])