首先插入十万个数据

 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:索引操作的更多相关文章

  1. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  2. mongodb索引操作

    创建索引 db.table.ensureIndex({name:1}) 创建联合索引 db.table.ensureIndex({"table.name":1,"tabl ...

  3. MongoDB(索引及C#如何操作MongoDB)(转载)

    MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...

  4. MongoDB索引的使用

    Table of Contents 1. 基本索引 2. 联合索引 3. 索引类型 4. 索引管理 1 基本索引 在数据库开发中索引是非常重要的,对于检索速度,执行效率有很大的影响.本 文主要描述了M ...

  5. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作

    2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...

  6. mongodb常用操作语句

    mongodb常用操作语句 A:创建数据表 db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean&g ...

  7. MongoDB索引(一)

    原文地址 一.介绍 我们已经很清楚索引会提高查询效率.如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档.对查询来说如果存在合适的索引,则Mongo ...

  8. .Net Core MongoDB 简单操作。

    一:MongoDB 简单操作类.这里引用了MongoDB.Driver. using MongoDB.Bson; using MongoDB.Driver; using System; using S ...

  9. mongoDB python 操作

    mongoDB python 操作 import pymongo mongo_client = pymongo.MongoClient(host="127.0.0.1",port= ...

  10. MongoDB索引的种类与使用

    一:索引的种类 1:_id索引:是绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段2:单键索引: 1.单键索引是最普通的索引 2.与_id索引不同,单键索 ...

随机推荐

  1. CDI的分析

    CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类 ...

  2. 【Jmeter】api性能测试总结

    1.前提概念 平时常用的性能测试:api性能测试+场景性能测试:今天就说一说api性能测试 2.如何进行性能测试? 需求:对某api进行性能测试,看看最大承受的并发数,分析下图表 分析: 错误思路:当 ...

  3. goaccess geoip 测试

      goaccess 是一个很不错的日志实时统计分析工具,我们可以用来方便的分析nginx apcahe iis 等的日志信息 对于geoip 的支持是需要源码编译的,所以基于官方docker 镜像添 ...

  4. Unix中共享信息方式

  5. 项目管理软件 GanttProject 节日表

    项目管理软件 GanttProject 节日表 GanttProject 是一款项目管理软件,对比一些商业项目管理软件一点不差,有些还更强大,比如以下的节假日自动选择. 文件地址在:C:\Progra ...

  6. [转]Java反射机制详解

    目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...

  7. python实现Content-Type类型为application/x-www-form-urlencoded发送POST请求

    周日晚上接到公司的电话需要通过新榜的接口拿下微博热搜数据,拿到接口文档看了下很简单的一个post请求,主要根据时间段来获取热搜数据. 在实际编码的过程中经常遇到header的Content-Type的 ...

  8. CenterOS7.5中搭建wordpress

    centeros7.5中搭建wordpress 1.环境 云平台:华为云 服务器操作系统:CentOS7.: 博客部署的服务器:Apache HTTP: 数据库:mysql: 框架:wordpress ...

  9. PHP-ML机器学习库之安装篇

    1.PHP-ML库安装要求:PHP>=7.1 2.切换到项目的跟目录下,使用composer进行安装:composer require php-ai/php-ml 安装完成后的目录如下: 新建测 ...

  10. RGB格式图像转化为HSV格式

    注:在阴影检测算法中经常需要将RGB格式的图像转化为HSV格式,对于阴影区域而言,它的色度和饱和度相对于原图像而言变化不大,主要是亮度信息变化较大,,将RGB格式转化为HSV格式,就可以得到H.S.V ...