首先插入十万个数据

 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. ubuntu 16.04 更换源

    进入/etc/apt/ cd /etc/apt 在修改前先对 sources.list文件进行备份 sudo cp sources.list sources.list.bak 修改sources.li ...

  2. 421. Maximum XOR of Two Numbers in an Array

    这题要求On时间复杂度完成, 第一次做事没什么思路的, 答案网上有不贴了, 总结下这类题的思路. 不局限于这个题, 凡是对于这种给一个  数组,  求出 xxx 最大值的办法, 可能上来默认就是dp, ...

  3. [转] Linux运维常见故障排查和处理的技巧汇总

    作为linux运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个Linux运维工程师良好的习惯.每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着 ...

  4. asp.net IE11 dopostback is null or undefined 为空或未定义

    个人认为这个问题一般是未按规范书写导致,但懒人嘛就有懒办法. 页面重构一般可以解决此问题,但是对于不便重写的情形,这里仍然有一个解决办法. 解决方法: 1.将文件ie11.browser拷贝到C:\W ...

  5. Linux系统安装管理

    将lfs linux liveCD的内容copy安装到硬盘 先将98.ima(dos启动软盘镜像文件)用ultraISO写入到u盘(usbhdd+), 不必勾选“创建启动分区”. 将liveCD和内核 ...

  6. VS2010+WPF+LINQ for MySQL

    学习wpf,连接数据库和linq for mysql 1.参考以前博文,恢复在 Vs2010+linQ for Mysql的环境. 2.建立 wpf工程,参照1,生成 datacontext.cs , ...

  7. 纯CSS制作图形效果

    下面所有的例子都是在demo.html的基础上添加相关样式实现的. <!DOCTYPE html> <html> <head> <meta charset=& ...

  8. Scrapy学习篇(十二)之设置随机IP代理(IPProxy)

    当我们需要大量的爬取网站信息时,除了切换User-Agent之外,另外一个重要的方式就是设置IP代理,以防止我们的爬虫被拒绝,下面我们就来演示scrapy如何设置随机IPProxy. 设置随机IPPr ...

  9. c# HashTable (哈希表)

    HashTable 哈希表 也是System.Collections集合下的数据结构类 它储存的也是Object类型的对象 但是它在内存中是散列排布的 因为这个特性,非常适合存储大量的数据 在Hash ...

  10. 在mysql数据库中创建Oracle数据库中的scott用户表

    在mysql数据库中创建Oracle数据库中的scott用户表 作者:Eric 微信:loveoracle11g create table DEPT ( DEPTNO int(2) not null, ...