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 query查询
- mongodb insert操作
- MongoDB的MapReduce的用法
- MongoDB的连接字符串
- mongodb索引的优化
- MongoDB优化器profile
- mongodb 分页查询
- mongodb python教程(python使用pymongo操作mongo的完整步骤)
- Mongodb数据导入导出
- java连接mongodb(Docker连接mongodb实现过程及代码案例)
- mongodb基本数据类型
- python mongodb 基本操作(Python使用pymongo库操作MongoDB数据库的方法实例)
- mongodb用户权限
- mongodb可视化工具
- mongodb中mapreduce实例
- 二次创业 的富士胶片,在进博会上首次展示完成转型后的全线医疗产品(二次创业的富士胶片)
- 富士胶片 中国 我们对上海的信心没有任何改变(富士胶片中国)
- 赢麻了 富士公布2021年度财报 营利同比增长240(富士公布2021年度财报)
- 医事文化谈屑 | 古人的名 字 号(医事文化谈屑古人的名)
- ()
- 网友很惭愧,自己写了很多年的字,到头来还不如一名小学生写的好(自己写了很多年的字)
热门推荐
- js数组去重的十种方法(JavaScript常用数组去重实战源码)
- C#递归的应用
- mysql主从复制配置(Mysql实现主从配置和多主多从配置)
- 阿里云服务器ecs如何建站(阿里云服务器ECS远程连接Windows实例失败的解决方法)
- python无法拒绝的表白代码教程(很酷的python表白工具 你喜欢我吗)
- vue如何获取元素(vue第一次获取不到元素的解决方法记录)
- dedecms手机页面怎么固定(织梦dedecms配置手机wap站点并绑定二级域名)
- vue中如何判断请求状态码(关于VUE的编译作用域及slot作用域插槽问题)
- python 聚类找出同一类别的数据(Python实现简单层次聚类算法以及可视化)
- 虚拟环境python详细教程(python创造虚拟环境方法总结)