第五讲mongodb中的索引
Mongodb中的索引
今天我们来分享mongodb中的索引,
好了现在我们先准备一下我们需要的数据,我们像我们的tty数据库里面添加20w的数据,
方法如下
for(var i=0;i<200000;i++){
db.tty.insert({name:"zzl"+i,age:i})
}
下面我们来查询一条数据来看一下,
比如我们要找到 zzl180000,就是第18w位置的数据,,(在这里有给大家分享一个 explain方法,有了这个方法我们就可以很清楚的知道,这个查询的详细信息了,)现在我们来查询一下
语句是这样的:
db.tty.find({name:"zzl180000"}).explain()
通过这个图片 我们可以看到我们的方法的执行时间是121毫秒,
"millis" : 121,
我们的查找方式是表扫描
"cursor" : "BasicCursor",
是否有索引是没有
"isMultiKey" : false,
遍历文档是 20w,总共有文档是 20w,(是不是感觉这个扫描很恐怖呀)
"nscanned" : 200000,
"nscannedObjectsAllPlans" : 200000,
下面我们来建立一个索引在来看看,在mongodb中创建索引的方法很简单
那就是unsuerIndex({字段名称:1或-1}),1是正序,-1是倒序
下面我们来为我们的tty建立一个索引
db.tty.ensureIndex({name:1})
索引建立成功;
然后我们看一下我们tty里面都有什么索引
db.tty.getIndexes(),其中的getIndexes是获取表里面索引的方法,这个方法经常的用到
大家可以看到 我们的 索引已经建立啦 名称是 name_1
下面我们在执行一下我们上面的查询方法看一下
db.tty.find({name:"zzl180000"}).explain()
大家可以看到,时间明显的变小了,而且,查找文件只有一个
索引常见注意事项:
1.在创建索引时, 1是正序,-1是倒序,索引的正序和倒序要符合实际情况,比如刚才我们建立的是正序排列的,那么我们如果建立是个倒序排列的索引会怎么样哪,
我们吧原来的索引删除掉,()
db.tty.dropIndexes(),dropIndexes是mongodb提供的一个删除索引的方法
然后我们在看一下我们的索引
大家可以看一下我们的所已经删除;
然后我们在添加索引:
db.tty.ensureIndex({name:-1})这一次我们建立的是倒序排列的所以
然后我们在查一下 zzl180000看一下用时
db.tty.find({name:"zzl180000"}).explain()
大家可以看一下,用时是0毫秒,查找一个文档,返回一个文档,可以看出,同样是一个索引,如果建立的合适我们的性能能提高有多大,
2.
Mongodb创立索引会影响插入的性能
3.复合索引要注意先后顺序
下面给出几个创建索引的常用方法
- 唯一索引:db.tty.ensureIndex({name:1},{unique:true})
- 剔除重复索引:db.tty.ensureIndex({name:1},{unique:true,dropDups:true})
- 查询指定索引hint({})
db.tty.find({name:”zzl180000”}).hint({name:-1})
- 后台执行(当数据库比较大的时候用到)
Db.tty.ensureIndes({name:-1},{background:true})
5.删除索引db.tty.dropIndex();