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

mongodb学习(索引详解)

2015-05-23 01:09 357 查看
这篇博客将会给大家代码mongodb索引的详细学习,包括了索引管理和空间索引。索引是用来增加我们的查询效率的,关系型数据库和非关系型数据库都有索引的功能,在某一个字段或者是键上添加索引,那么当查询该字段或者是键的时候,会提升很大的效率。

首先看看没有创建索引之前的情况:




可以看到,这里我首先为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:"索引的键:"*"})


关于索引的学习就到这里了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: