您的位置:首页 > 数据库 > Mongodb

MongoDB 学习笔记(四):索引

2013-10-18 10:34 519 查看
一、索引的基本使用

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、使用索引注意点

索引的创建在提高查询性能的同时会降低插入的性能,因为在插入文档时还需要对索引进行维护,对于经常查询而少插入的情况可以考虑使用索引。

复合索引应根据实际业务情况注意索引的先后顺序。

在做排序时如果是超大数据量也可以考虑加上索引来提高排序的性能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: