mongodb学习(四)

索引操作

       日常开发中我们都需要对程序进行性能优化。

          mongodb的索引会带来怎样的性能提升呢?

          我们先插入10w条数据

                db.person.remove()

                for(var i=0;i<100000;i++){

                db.person.insert({"name":"zjs"+i,"age":i})

                }

          一:性能分析函数(explain)

             db.person.find({"name":"zjs"+10000})  查询到结果,好,我们的数据已经插入成功,mongodb给我们提供了一种分析工具。这里name字段没有建立任何索引,这里我们就查询一个“name10000”的姓名。

这里有几个关键的字段

        cursor:这里为BasicCursor,意思是采用表扫描,也就是顺序查找。

        nscanned:100000,意思就是数据了浏览了10W个文档。

        n:这里为1,也就是最终返回了1个文档。

        millis:耗时78毫秒。

下面我们使用索引

 

这里我们使用ensureIndex对name设置索引  1表示对name进行升序,-1表示对name进行降序。

我们可以看到 cursor为 BtreeCursor  mongodb采用B树的结构来存放索引,索引名为后面的“name_1"

            nscanned为1     n:1    millis:竟然为0。

二:唯一索引

   db.person.ersureIndex({“name”:1},{"unique":true})

三:组合索引

     有时候我们的查询不是单条件的,可能是多条件,比如查找出生于“1995-05-03”名字为bob的同学。我们可以建立姓名和生日的联合索引来加速查询。

     db.person.ensureIndex({"name":1,"birthday":1})

     db.person.ensureIndex({"birthday":1,"name":1})

   上面两种建立的索引不同,升序和降序的顺序不同都会产生不同的索引。

   我们可以使用db.person.getIndexes()来查看到底产生了哪些索引。

   那查询优化器会使用哪个查询操作作为操作呢?

   它会给我们做出最优的选择,我们做查询时,查询优化器会使用我们建立的这些索引来创建查询方案

,如果某一个先执行完则其他查询方案被close掉,这种方案会被mongodb保存起来,当然如果非要自己指定

的查询方案,这也是可以的,在mongodb中给我们提供了hint方法让我们可以暴力执行。

   db.person.find({"birthday":"1989-2-4","name":"bob"}).hint({"birthday":1,"name":1}).explain()

四:删除索引

     可能随着业务需求的变化,原先建立的索引可能没有存在的必要了,我们需要删除,索引会降低cud这三种操作的性能。

     db.person.dropIndexes("name_1")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值