MongoDB中建立索引对查询性能的影响(2015-11-26 22:09:02)

为什么80%的码农都做不了架构师?>>>   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

你可能感兴趣的:(MongoDB中建立索引对查询性能的影响(2015-11-26 22:09:02))