博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB中建立索引对查询性能的影响(2015-11-26 22:09:02)
阅读量:5740 次
发布时间:2019-06-18

本文共 1760 字,大约阅读时间需要 5 分钟。

  hot3.png

1、在user集合中创建10000条数据记录,顺便说一句:在2.6的版本执行下面的语句需要将近一分钟

> for(var i=1;i<=100000;i++) {var rand=parseInt(i*Math.random());db.user.insert({"name":"Dreyer"+i,"age":i})}

WriteResult({ "nInserted" : 1 })

2、查询name为Dreyer1000的记录数据,利用mongodb中自带的explain性能分析函数

> db.user.find({"name":"Dreyer1000"}).explain();

{

        "cursor" : "BasicCursor",

        "isMultiKey" : false,

        "n" : 1,

        "nscannedObjects" : 100000,

        "nscanned" : 100000,

        "nscannedObjectsAllPlans" : 100000,

        "nscannedAllPlans" : 100000,

        "scanAndOrder" : false,

        "indexOnly" : false,

        "nYields" : 781,

        "nChunkSkips" : 0,

        "millis" : 110,

        "server" : "localhost.localdomain:27017",

        "filterSet" : false

}

其中上面的

"cursor" : "BasicCursor",代表的是全表扫描的意思,

        "nscanned" : 100000,代表的是扫描了100000个文档数据

        "n" : 1,表示最终返回了一个文档

        "millis" : 110,表示执行耗时110毫秒

3、给name字段建立索引,ensureIndex用于创建索引,1代表按照name进行升序,-1代表按照name进行降序

> db.user.ensureIndex({"name":1})db.user.ensureIndex({"name":1})

{

        "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 1,

        "numIndexesAfter" : 2,

        "ok" : 1

}

我们也可以使用getIndexes语句查看集合中的索引信息

> db.user.getIndexes();

[

        {

                "v" : 1,

                "key" : {

                        "_id" : 1

                },

                "name" : "_id_",

                "ns" : "users.user"

        },

        {

                "v" : 1,

                "key" : {

                        "name" : 1

                },

                "name" : "name_1",

                "ns" : "users.user"

        }

]

>

4、再次查询name为Dreyer1000的记录数据并分析

> db.user.find({"name":"Dreyer100"}).explain();

{

        "cursor" : "BtreeCursor name_1",

        "isMultiKey" : false,

        "n" : 1,

        "nscannedObjects" : 1,

        "nscanned" : 1,

        "nscannedObjectsAllPlans" : 1,

        "nscannedAllPlans" : 1,

        "scanAndOrder" : false,

        "indexOnly" : false,

        "nYields" : 0,

        "nChunkSkips" : 0,

        "millis" : 0,

        "indexBounds" : {

                "name" : [

                        [

                                "Dreyer100",

                                "Dreyer100"

                        ]

                ]

        },

        "server" : "localhost.localdomain:27017",

        "filterSet" : false

}

>

建立索引之后,mongodb采用B树的结构来存放索引,只用一次就获取到了我们想要的数据,花费的时间都没有超过1毫秒

转载于:https://my.oschina.net/dreyer/blog/536162

你可能感兴趣的文章
ref获取元素 vue 删除子元素_vue 添加删除子元素
查看>>
mysql有回收站吗_mysql 回收站
查看>>
cd usr local mysql_不想每次都到: /usr/local/mysql/bin
查看>>
amoeba mysql exists_使用Amoeba for mysql实现mysql读写分离
查看>>
mysql mmm坑_MySql——MMM部署过程中的各种报错及解决办法
查看>>
mysql中的lgwr_LGWR进程的trace里总是报20多秒的警告信息
查看>>
mysql微服务_go Gojj+Mysql搭建微服务-Go语言中文社区
查看>>
kettle MySQL blob_kettle demo12 通过JAVA创建trans并保存到数据库资源库
查看>>
myloader mysql_myloader原理0
查看>>
php 判断来源 微信客户端_php多种方法判断是否为手机、微信访问的函数,很准确...
查看>>
scilab 求微分_科学计算自由软件SCILAB在常微分方程中的应用
查看>>
java 对象之间转换_JAVA类型之间的转换
查看>>
用java的输出姓名_用java程序输出自己的姓名
查看>>
java gc回收区域_Java垃圾回收机制(GC)—怎么回收垃圾(内存)?
查看>>
java listiterator_Java Iterator ListIterator 理解
查看>>
java redis 登录_Java 使用 Redis
查看>>
java 汉字乱码_Java中文乱码问题
查看>>
java中awt事件处理_Java AWT 事件处理
查看>>
java斜体_Java可以指示字体是否为斜体字
查看>>
java共享锁和排他锁的区别_漫话:如何给女朋友解释什么是共享锁和排他锁
查看>>