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索引不同,单键索 ...
随机推荐
- 读书笔记--《gongchandang宣言》
纪念马克思诞辰200周年 末尾 gongchandang人不屑于隐瞒自己的观点和意图.他们公开宣布:他们的目的只有用暴力推翻全部现存的社会制度才能达到. 让统治接机在共产主义革命面前发抖吧. 无产者在 ...
- robot framework下载文件操作
不同的浏览器点击[下载]按钮之后,需要点击保存,还是确定,或者直接默认直接下载都是不一样的 1.chrome:点击[下载]之后,会自动执行下载操作,直到下载结束 A)点击下载,等待下载结束(sleep ...
- 使用openresty && minio && thumbor 构建稳定高效的图片服务器
备注: minio 是一个开源的s3 协议兼容的分布式存储,openresty nginx+lua 高性能可扩展的nginx 衍生版,thumbor 基于python 的图片处理服务器,支持图片的裁剪 ...
- Mathematics for Computer Science (Eric Lehman / F Thomson Leighton / Albert R Meyer 著)
I Proofs1 What is a Proof?2 The Well Ordering Principle3 Logical Formulas4 Mathematical Data Types5 ...
- c# 数据存储过程
什么是存储过程? 用某百科的话来说就是一堆为了完成某一功能或者某些功能的SQL语句的集合,而数据库则会将这些存储过程的方法存储到数据库中去. 优点: 1.可重用并且效率高:存储过程经过一次编译后不需要 ...
- vs2015 加载项目的时启动:无法启动 IIS Express Web 服务器
使用Visual Studio 2015 运行ASP.NET项目时,提示“无法启动IIS Express Web服务器”,无法运行,如图: 一般出现在重装系统之后,或者项目是从别的电脑上复制过来的.解 ...
- 阅读 video in to axi4-stream v4.0 笔记
阅读 video in to axi4-stream v4.0 笔记 axi4 stream里面只传输的有效数据. 引用: 使能了video timing controller core 的所用信号, ...
- sqlserver乱码问题解决
* 如果是自己创建的数据库那么就应该在一开始就选择排序规则中的:Chinese_PRC_CI_AS 1.改变排序规则方法: 右击创建的数据库,属性→选项→排序规则中选择:Chinese_PRC_CI_ ...
- VS2012 安装 NPOI (管理NuGet程序包)
问题背景 选择项目后右键==>管理NuGet程序包,搜索NPOI,返回服务器无法找到...404 解决方法: 第一步: 访问:https://www.nuget.org/api/v2/ ...
- ByteToByte64String、Base64StringToBytes
public string ByteToByte64String(byte[] bytes) { return Convert.ToBase64String(bytes); } public byte ...