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 python教程(python使用pymongo操作mongo的完整步骤)
- java连接mongodb(Docker连接mongodb实现过程及代码案例)
- mongodb常用命令的语法
- mongodb索引的优化
- mongodb distinct去重
- mongodb eval 执行服务器端脚本
- MongoDB的MapReduce的用法
- MongoDB命令与SQL语法对比
- mongodb可视化工具
- MongoDB聚合函数
- 什么是mongodb 固定集合
- mongodb简单介绍和安装
- mongodb query查询
- MongoDB 日志文件太大
- mongodb group分组
- 哪版孙悟空最萌 黄渤躺萌了(哪版孙悟空最萌)
- 融入小人物的喜怒哀乐,黄渤饰演的角色为什么让人观看时欲罢不能(融入小人物的喜怒哀乐)
- 《极限挑战》深访都市夜归人,夜间打工者体验,黄磊录完憔悴了(极限挑战深访都市夜归人)
- Google 推出了一个游戏生成器,让不会编程的你也能自己设计游戏(推出了一个游戏生成器)
- 二胎家庭老大爱闹情绪,用这招很有效(二胎家庭老大爱闹情绪)
- 一个30岁男人外遇失败的全过程(一个30岁男人外遇失败的全过程)
热门推荐
- vue怎么操作表格(如何在在Vue3中使用markdown 编辑器组件)
- harbor镜像仓库扫描原理(Harbor搭建Docker私有仓库的实现方法)
- python一分钟认识条件判断(对python判断ip是否可达的实例详解)
- 聚集索引和主键的区别
- sqlserver表分区步骤(行转列之SQL SERVER PIVOT与用法详解)
- pythonselenium判断网页加载完成(python 实现selenium断言和验证的方法)
- html5添加背景(Html5实现首页动态视频背景的示例代码)
- 怎么把云服务器初始化(云服务器需要重启吗?)
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- docker显示出错应用图标怎么处理(docker 命令报异常permission denied的解决方案)