mongodb学习(索引详解)
2015-05-23 01:09
357 查看
这篇博客将会给大家代码mongodb索引的详细学习,包括了索引管理和空间索引。索引是用来增加我们的查询效率的,关系型数据库和非关系型数据库都有索引的功能,在某一个字段或者是键上添加索引,那么当查询该字段或者是键的时候,会提升很大的效率。
首先看看没有创建索引之前的情况:
可以看到,这里我首先为persons的集合中添加了20万条数据,然后利用:
来计算查询第8万条数据所需要的时间,可以看到,这里是消耗了101毫秒。速度还是可以的。
db.集合名称.ensureIndex({需要创建索引的键:1或-1})
这里1表示建立升序的索引,-1表示建立降序的索引
在创建索引以后的时间变为几乎为0毫秒了,还是大大大的提高了查询效率
注意:使用索引可以提高我们的查询效率,可是会影响我们的插入和更改的效率,因为在插入和更改的时候是会维护该索引的,对于更新较少查询较多的集合可以使用索引。
查看索引
可以看到这里有两个索引,一个是系统默认会创建一个”_id”索引,另外一个就是我们自己创建的”number_id”,可以看到这里的索引名称和 我们的键值默认是相同的,如果我需要创建自己的索引名称,比如我为name创建一个叫做”personName”的索引,可以这样写:
现在,我们的persons集合中有三个索引了,可以看到第三个name索引的名称就是我们自己给的”personName”
好了,已经为name键创建了一个降序的唯一索引,那么我们在试着插入一条name=”aName0”的记录
此时会插入失败,系统提示我们该name键已经创建了唯一索引
注意:指定的索引必须提前存在,不然会查询失败。
删除所有索引
关于索引的学习就到这里了。
首先看看没有创建索引之前的情况:
可以看到,这里我首先为persons的集合中添加了20万条数据,然后利用:
db.persons.find({id:80000}).explain()
来计算查询第8万条数据所需要的时间,可以看到,这里是消耗了101毫秒。速度还是可以的。
创建索引
接下来,我为persons集合的id键创建索引,在mongodb中为我们提供了一个方法:db.集合名称.ensureIndex({需要创建索引的键:1或-1})
这里1表示建立升序的索引,-1表示建立降序的索引
在创建索引以后的时间变为几乎为0毫秒了,还是大大大的提高了查询效率
注意:使用索引可以提高我们的查询效率,可是会影响我们的插入和更改的效率,因为在插入和更改的时候是会维护该索引的,对于更新较少查询较多的集合可以使用索引。
查看索引
db.persons.getIndexes()
可以看到这里有两个索引,一个是系统默认会创建一个”_id”索引,另外一个就是我们自己创建的”number_id”,可以看到这里的索引名称和 我们的键值默认是相同的,如果我需要创建自己的索引名称,比如我为name创建一个叫做”personName”的索引,可以这样写:
db.persons.ensureIndex({name:1},{name:"personName"})
现在,我们的persons集合中有三个索引了,可以看到第三个name索引的名称就是我们自己给的”personName”
创建唯一索引
db.persons.ensureIndex({键:1或-1},{unique:true})
好了,已经为name键创建了一个降序的唯一索引,那么我们在试着插入一条name=”aName0”的记录
此时会插入失败,系统提示我们该name键已经创建了唯一索引
去除重复值
如果我们在创建唯一索引之前,在需要创建唯一索引的键上已经存在重复值。可以利用下面代码去除已经存在的重复值:db.persons.ensureIndex({name:-1},{unique:true,dropDups:true})
指定查询使用的索引
如果我的集合中创建了好几个索引,我需要使用某一个索引,可以通过在find()后面加上hint({索引名称:1或-1}),来实现使用指定的索引。注意:指定的索引必须提前存在,不然会查询失败。
查看已经创建的索引
系统为我们提供了一个system.indexex集合,里边存储的是所有集合中创建的索引:异步创建索引
在数据量很大的时候,创建索引是需要耗费一段时间的,在创建索引的过程中,会将集合锁住,完成之后会将集合解锁,这段时间我们不能对集合做任何操作,此时可以创建异步索引。db.persons.ensureIndex({键:1或-1},{background:true})
删除索引
删除单个索引db.runCommand({dropIndexes:"集合名称",index:"索引的键:1或-1"})
删除所有索引
db.runCommand({dropIndexes:"集合名称",index:"索引的键:"*"})
关于索引的学习就到这里了。
相关文章推荐
- 菜鸟的mongoDB学习---(六)MongoDB 索引
- mongodb学习笔记之索引(转)
- MongoDB学习 索引
- MongoDB学习(三)MongoDB 3.2.8的使用详解
- mongodb3.0的索引管理学习整理
- MongoDB学习记录—索引
- mongodb学习(查询详解)
- 学习MongoDB 八: MongoDB索引(索引限制条件)(二)
- mongodb学习(三)-mongodb索引
- 学习MongoDB--(5-1):索引(简介、使用)
- MongoDB学习 索引
- mongodb学习04 操作详解(2)
- MySql 学习之索引详解
- MongoDB学习(4)索引
- MongoDB中索引的创建和使用详解
- MongoDB学习04: 索引
- MongoDB学习 索引
- MongoDB学习笔记(8)--索引及优化索引
- lucene学习资料(索引文件格式详解)
- mongodb学习(六)索引