文档章节

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

Dreyer
 Dreyer
发布于 2015/11/26 22:12
字数 401
阅读 186
收藏 5

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毫秒

© 著作权归作者所有

Dreyer
粉丝 7
博文 23
码字总数 13189
作品 0
广州
高级程序员
私信 提问
MongoDB使用小结:一些常用操作分享

MongoDB使用小结:一些常用操作分享 本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell、pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程。 MongoD...

linjin200
09/05
16
0
Node.js进阶教程第三步:Sails框架-何韬-专题视频课程

Node.js进阶教程第三步:Sails框架—7830人已学习 课程介绍 Sails是基于Express的开发框架,能够构建项目,封装了众多细节,结构清晰,另外还有众多的扩展。 本课程通过项目驱动式来学习sai...

pkutao
2016/10/31
0
0
Linux下的Mongodb部署应用梳理

一、Mongodb简介 官网地址:http://www.mongodb.org/ MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。MongoDB 是一个介于关系数据库和非关系数据库之...

拎壶冲冲冲
2018/08/15
0
0
MySQL和MongoDB的性能测试

软硬件环境 MySQL版本:5.1.50,驱动版本:5.1.6(最新的5.1.13有很多杂七杂八的问题) MongoDB版本:1.6.2,驱动版本:2.1 操作系统:Windows XP SP3(这个影响应该不大) CPU:Intel Core2...

mallon
2010/09/04
27.4K
12
《阿里巴巴MongoDB4.0高级实战:基于Java Spring Boot 2.0》运维、监控、聚合、集群、监控等高级面试题

《阿里巴巴MongoDB4.0高级实战》阿里巴巴技术大牛 资深专家P9叶翔、专家徐雷. NoSQL排名第一!最流行的NoSQL数据库;谷歌、阿里巴巴、蚂蚁金服、腾讯、百度等一线互联网公司必备技能。 本系列...

徐雷frank
2018/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
23分钟前
8
0
cloud-zuul路由网关

九、zuul路由网关 概述 1.1 能干嘛 路由、过滤 路由基本配置 路由访问映射规则 十、springCloud config分布式配置中心

榴莲黑芝麻糊
24分钟前
8
0
Circuit Breaker模式

Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误。该模式可以提高一个应用的稳定性和弹性。 问题 在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源...

mskk
36分钟前
11
0
写论文之前的准备都有哪些?干货来了!

原文链接:https://www.lwfdy.com/archives/144.html 之前跟大家谈了许多有关于初稿修改以及写作事项需要注意的问题,那么今天我们来说一说,在写之前,我们需要做哪些准备呢,为了做到下笔如...

辅导员
43分钟前
10
0
idea快捷键

Alt + Enter 引入类 Ctrl + O 查看我们继承的类或者接口中的方法,以及我们要实现的方法 Ctrl + Alt + b 查看接口实现类中方法(就是我们使用接口编程时,在调用实现类方法处直接Ctrl+鼠标左...

行者终成事
50分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部