MongoDB:索引操作
首先插入十万个数据
for(var i=0;i<100000;i++){
var rand = parseInt(i*Math.random());
db.person_test.insert({"name":"hxc"+i,"age":i})
}
使用性能分析函数(explain)分析查询速度。使用方法详见:http://blog.csdn.net/leshami/article/details/53521990
db.person.find({"name":"hxc"+99999}).explain("executionStats")
执行详细结果
{
"queryPlanner" : {
"plannerVersion" : ,
"namespace" : "thirdparty.person_test",
"indexFilterSet" : false,
"parsedQuery" : {
"name" : {
"$eq" : "hxc99999"
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"name" : {
"$eq" : "hxc99999"
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
},
"executionStats" : { //执行计划相关统计信息
"executionSuccess" : true, //执行成功的状态
"nReturned" : , //返回结果集数目
"executionTimeMillis" : , //执行所需的时间,毫秒
"totalKeysExamined" : , //索引检查的时间
"totalDocsExamined" : , //检查文档总数
"executionStages" : {
"stage" : "COLLSCAN", //使用集合扫描方式
"filter" : { //过滤条件
"name" : {
"$eq" : "hxc99999"
}
},
"nReturned" : , //返回结果集数目
"executionTimeMillisEstimate" : , //预估的执行时间,毫秒
"works" : , //工作单元数,一个查询会被派生为一些小的工作单元
"advanced" : , //优先返回的结果数目
"needTime" : ,
"needFetch" : ,
"saveState" : ,
"restoreState" : ,
"isEOF" : ,
"invalidates" : ,
"direction" : "forward", //方向
"docsExamined" : //文档检查数目
}
},
"serverInfo" : {
"host" : "x-integration1",
"port" : ,
"version" : "3.0.6",
"gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
},
"ok" :
}
可以看到执行查询所用的时间是71ms,一共检查了100000个文档。
这时的查询速度不是很理想,那么如何优化查询速度呢?就要使用索引查询了。
建立索引查询
db.person_test.ensureIndex({"name":});
db.person_test.find({"name":"hxc"+}).explain("executionStats");
执行结果
{
"queryPlanner" : {
"plannerVersion" : ,
"namespace" : "thirdparty.person_test",
"indexFilterSet" : false,
"parsedQuery" : {
"name" : {
"$eq" : "hxc99999"
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"name" :
},
"indexName" : "name_1",
"isMultiKey" : false,
"direction" : "forward",
"indexBounds" : {
"name" : [
"[\"hxc99999\", \"hxc99999\"]"
]
}
}
},
"rejectedPlans" : [ ]
},
"executionStats" : { //执行计划相关统计信息
"executionSuccess" : true, //执行成功的状态
"nReturned" : , //返回结果集数目
"executionTimeMillis" : , //执行所需的时间,毫秒
"totalKeysExamined" : , //索引检查的时间
"totalDocsExamined" : , //检查文档总数
"executionStages" : {
"stage" : "FETCH", //使用游标扫描方式
"nReturned" : , //过滤条件
"executionTimeMillisEstimate" : ,
"works" : ,
"advanced" : ,
"needTime" : ,
"needFetch" : ,
"saveState" : ,
"restoreState" : ,
"isEOF" : ,
"invalidates" : ,
"docsExamined" : ,
"alreadyHasObj" : ,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : , //返回结果集数目
"executionTimeMillisEstimate" : ,//预估的执行时间,毫秒
"works" : , //工作单元数,一个查询会被派生为一些小的工作单元
"advanced" : , //优先返回的结果数目
"needTime" : ,
"needFetch" : ,
"saveState" : ,
"restoreState" : ,
"isEOF" : ,
"invalidates" : ,
"keyPattern" : {
"name" :
},
"indexName" : "name_1",
"isMultiKey" : false,
"direction" : "forward",
"indexBounds" : {
"name" : [
"[\"hxc99999\", \"hxc99999\"]"
]
},
"keysExamined" : ,
"dupsTested" : ,
"dupsDropped" : ,
"seenInvalidated" : ,
"matchTested" :
}
}
},
"serverInfo" : {
"host" : "x-integration1",
"port" : ,
"version" : "3.0.6",
"gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
},
"ok" :
}
可以看到查询时间小于1ms!只需查询一个文档就可以了!这就大大优化了查询的速度。
MongoDB:索引操作的更多相关文章
- Mongodb学习笔记三(Mongodb索引操作及性能测试)
第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...
- mongodb索引操作
创建索引 db.table.ensureIndex({name:1}) 创建联合索引 db.table.ensureIndex({"table.name":1,"tabl ...
- MongoDB(索引及C#如何操作MongoDB)(转载)
MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...
- MongoDB索引的使用
Table of Contents 1. 基本索引 2. 联合索引 3. 索引类型 4. 索引管理 1 基本索引 在数据库开发中索引是非常重要的,对于检索速度,执行效率有很大的影响.本 文主要描述了M ...
- Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...
- mongodb常用操作语句
mongodb常用操作语句 A:创建数据表 db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean&g ...
- MongoDB索引(一)
原文地址 一.介绍 我们已经很清楚索引会提高查询效率.如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档.对查询来说如果存在合适的索引,则Mongo ...
- .Net Core MongoDB 简单操作。
一:MongoDB 简单操作类.这里引用了MongoDB.Driver. using MongoDB.Bson; using MongoDB.Driver; using System; using S ...
- mongoDB python 操作
mongoDB python 操作 import pymongo mongo_client = pymongo.MongoClient(host="127.0.0.1",port= ...
- MongoDB索引的种类与使用
一:索引的种类 1:_id索引:是绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段2:单键索引: 1.单键索引是最普通的索引 2.与_id索引不同,单键索 ...
随机推荐
- maven项目pom.xml第一行报错
maven项目pom.xml第一行报错 这是第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi= ...
- spring boot 项目无法访问静态页面
- c++ 快速读入输出
1. 读入优化 C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢? 其实,经过类似高精度的处理,就可以实现类型转换啦! 下面是正负数读入优化模板: #include ...
- Django项目在linux系统中虚拟环境部署
1.在linux系统下,安装virtualenv 命令:pip install virtualenv 2.项目部署前的准备 1. Django web project deployment 1.1. ...
- YAML 知识点
YAML:Ain't Markup Language 的缩写 YAML文件定义了一系列带有约束说明的任务,这些任务都是以任务名开始并且至少要包含script部分. 任务是由Runners接管并且由服务 ...
- 阅读 Device Driver Programmer Guide 笔记
阅读 Device Driver Programmer Guide 笔记 xilinx驱动命名规则 以X开头 源文件命名规则 以x打头 底层头文件与高级头文件 重点来了,关于指针的使用 其中 XDev ...
- TCP/IP详解--TCP连接中TIME_WAIT状态过多
TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的.仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT.服务器在处理客户端请 ...
- Android之listview添加数据篇
一.ListView: 1. ListView通常有两个职责: 1.向布局填充数据 2.处理选择点击等操作 2.ListView的创建需要3个元素: 1. ListView中的每一列的View. 2. ...
- [转][C#]Linq 的扩展方法
public static class LinqEx { public static IEnumerable<TResult> LeftExcludingJoin<TSource, ...
- JAVA多线程17个问题
1.Thread 类中的start() 和 run() 方法有什么区别? Thread.start()方法(native)启动线程,使之进入就绪状态,当cpu分配时间该线程时,由JVM调度执行run( ...