第五讲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.复合索引要注意先后顺序

 

下面给出几个创建索引的常用方法

  1. 唯一索引:db.tty.ensureIndex({name:1},{unique:true})
  2. 剔除重复索引:db.tty.ensureIndex({name:1},{unique:true,dropDups:true})
  3. 查询指定索引hint({})

db.tty.find({name:”zzl180000”}).hint({name:-1})

  1. 后台执行(当数据库比较大的时候用到)

Db.tty.ensureIndes({name:-1},{background:true})

5.删除索引db.tty.dropIndex();

posted @ 2015-01-13 16:39  瀚海行舟  阅读(298)  评论(0编辑  收藏  举报