MongoDB 学习笔记(四):索引
一、索引的基本使用
1、建立索引
在shell中为某个key建立索引的方法为:db.集合名.ensureIndex({key:1}),其中的key表示为哪个key建立索引,1表示升序建立索引,而-1表示降序建立索引,如下图:为age这个键升序建立索引。
2、在shell中查看数据库已建立的索引
在system.indexes和system.namespaces集合中能看到数据库已建立的索引,如下图:之前有将结果,当插入一条文档到集 合中时,如果该文档没有“_id”键时,系统会默认为文档加上该键,而从下图结果中可以发现,系统还会默认为“_id”键建立索引。
3、索引名称
从上图中可以看到刚刚为age这个key升序建立的索引名字是“age_1”。当建立索引时,如果没指定索引的名称,索引的名称默认是 “key_1/-1”,也就是建立索引的那个键的名字加上下划线,再加上1(升序)或-1(降序)。也可以在建立索引时指定索引的名称,使用方式是使用 ensureIndex函数的第二个参数指定name键,如下图:为age键建立倒序索引,并指定名称为“$index_age_-1”。
4、唯一索引
建立唯一索引是使用ensureIndex函数的第二个参数,指定unique键为true,如下图:为name键建立升序的唯一索引,并指定索引名字。
这样建立唯一索引后,当再次插入一条文档,而该文档的name键的值已存在了就不能插入该文档了。但是如果在为某个key建立唯一索引之前,该集合 的所有文档中这个key的值已经存在重复的情况了,如果是在这种情况下为该key建立唯一索引,则要使用ensureIndex函数的第二个参数,指定 dropDups键为true,如下图:指定了dropDups键为true后,它会删除在这个要建立索引的key上重复的数据,只保留一条。
5、hint:在查询时强制使用指定的索引
前提是指定使用的索引必须是已经成功创建了的,如下图:
二、空间索引(2D索引)
1、有如下一个坐标系,其中有14个点,将每一个点(x,y)存入MongoDB数据库中成为一个文档。
2、为以上建立的coordinate集合中的gis键建立空间索引,如下图:如果不写第二个参数,则默认会建立一个[-180, 180]之间的空间索引。
3、在以上的基础上,查询离点(25,25)最近的三个点(包含本身),如下图:
4、查询以点(35,15)和点(50,0)为对角线的正方形中所有的点,如下图:
5、查询以点(40,10)为圆心,半径为10的圆中的点,如下图:
三、索引管理
1、删除索引
在删除索引时可以指定要删除的索引的名字而执行精确删除,还可以使用*号来进行批量删除,shell命令为:db.runCommand({dropIndexes:"集合名", index:"索引名或*号"}),如下图:从结果中发现不能删除默认给_id键生成的索引。
2、执行创建索引的过程中会暂时锁表,为了不影响查询可以让索引的创建过程在后台执行,即指定ensureIndex函数的第二个参数的background键为true即可,如下:
四、其他
1、explain函数
执行查询时,详细查看本次查询使用的索引和状态信息,就是关系型数据库中的查询计划,如下图:结果中cursor代表的就是使用的索引。
2、使用索引注意点
- 索引的创建在提高查询性能的同时会降低插入的性能,因为在插入文档时还需要对索引进行维护,对于经常查询而少插入的情况可以考虑使用索引。
- 复合索引应根据实际业务情况注意索引的先后顺序。
- 在做排序时如果是超大数据量也可以考虑加上索引来提高排序的性能。
MongoDB 学习笔记(四):索引的更多相关文章
- mongodb学习笔记之索引(转)
一.索引基础: MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令: > db.test.ensureIndex({" ...
- MongoDB学习笔记四:索引
索引就是用来加速查询的.创建数据库索引就像确定如何组织书的索引一样.但是你的优势是知道今后做何种查询,以及哪些内容需要快速查找.比如:所有的查询都包括"date"键,那么很可能(至 ...
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- MongoDB学习总结(四) —— 索引的基本用法
说到索引,大家肯定都在关系型数据库或多或少接触过,它的主要目的是加速查询的速度.MongoDB作为一种数据库,当然也提供了索引的操作. 我们先插入1万条测试数据. 首先,我们先来看看不加索引查找nam ...
- MongoDB学习笔记-04 索引
索引是用来加速查询的.有了索引之后,数据库不必进行全表扫描,只需先在索引中查找,再根据找到的索引查找数据.MongoDB的索引几乎和传统关系型数据库一样. 创建索引 创建索引是在相应的集合中使用ens ...
- MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系
MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...
- MongoDB 学习笔记四 C#调用MongoDB
驱动 下载 https://github.com/mongodb/mongo-csharp-driver/downloads 项目地址: https://github.com/mongodb/mong ...
- MongoDB 学习笔记之 索引
索引: db.media.createIndex({"Tracklist": 1}) 1表示升序 -1表示降序 我们要着重看一下对数组创建索引的情况. 构建一个集合:db.medi ...
- MongoDB 学习笔记之 索引选项和重建索引
索引选项: {background:true}在后台创建索引,索引在构建过程中,其他客户端仍然可以查询数据,不会阻塞. db.comments.createIndex({anonymous: 1},{ ...
- MongoDB学习笔记四—增删改文档下
$slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...
随机推荐
- 解决windows文件在linux系统中显示乱码的问题
问题: 在Windows下用matlab写的代码(.m)到Linux(centos)下,注释的中文全是乱码. 原因: Windows下默认使用的是GB2312编码,Linux默认使用的是UTF-8. ...
- Pavel and barbecue
Pavel and barbecue time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 转载 - 算法实践——舞蹈链(Dancing Links)算法求解数独
出处:http://www.cnblogs.com/grenet/p/3163550.html 在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dan ...
- 【ACM】hdu_1170_Balloon Comes!_201307261946
Balloon Comes!Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 去掉文本框前后的空格(JS+JQuery)
表单验证时,需要去除文本框前后的空格才可以正确通过验证.以前看到过一句话:任何设计和代码都要对用户足够宽容. <input type="text" class="p ...
- Android开发时经经常使用的LogUtil
在开发过程中经经常使用到Log.我们常写的一种方式就是自己定义一个LogUtil工具类 private static boolean LOGV = true; private static boole ...
- 出错Can't convert 'WebElement' object to str implicitly
- ASIHTTPRequest框架的简单使用
ASIHttpRequest是一款及其强劲的HTTP訪问开源项目.让简单的API完毕复杂的功能,如:异步请求,队列请求,GZIP压缩.缓存,断点续传,进度跟踪,上传文件.HTTP认证.在新版本号中,还 ...
- B1965 [Ahoi2005]SHUFFLE 洗牌 数论
这个题的规律很好找,就是奇数直接除二,偶数除二加n/2.把这个规律整理一下就是(x * 2) % (n + 1),然后就直接求逆元就行了.一直30分的原因是qpow函数传参的时候用的int,然而变量是 ...
- java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user'
转自: https://blog.csdn.net/Winter_chen001/article/details/77332944