好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性能优化,而程序的操作无非就是CURD,通常我们

又会花费50%的时间在R上面,因为Read操作对用户来说是非常敏感的,处理不好就会被人唾弃,呵呵。

从算法上来说有5种经典的查找,具体的可以参见我的算法速成系列,这其中就包括我们今天所说的“索引查找”,如果大家对sqlserver比较了解

的话,相信索引查找能给我们带来什么样的性能提升吧。

我们首先插入10w数据,上图说话:

一:性能分析函数(explain)

好了,数据已经插入成功,既然我们要做分析,肯定要有分析的工具,幸好mongodb中给我们提供了一个关键字叫做“explain",那么怎么用呢?

还是看图,注意,这里的name字段没有建立任何索引,这里我就查询一个“name10000”的姓名。

仔细看红色区域,有几个我们关心的key。

cursor:       这里出现的是”BasicCursor",什么意思呢,就是说这里的查找采用的是“表扫描”,也就是顺序查找,很悲催啊。

nscanned:  这里是10w,也就是说数据库浏览了10w个文档,很恐怖吧,这样玩的话让人受不了啊。

n:             这里是1,也就是最终返回了1个文档。

millis:        这个就是我们最最最....关心的东西,总共耗时114毫秒。

二:建立索引(ensureIndex)

在10w条这么简单的集合中查找一个文档要114毫秒有一点点让人不能接收,好,那么我们该如何优化呢?mongodb中给

我们带来了索引查找,看看能不能让我们的查询一飞冲天.....

这里我们使用了ensureIndex在name上建立了索引。”1“:表示按照name进行升序,”-1“:表示按照name进行降序。

我的神啊,再来看看这些敏感信息。

cursor:       这里出现的是”BtreeCursor",这么牛X,mongodb采用B树的结构来存放索引,索引名为后面的“name_1"。

nscanned:  我擦,数据库只浏览了一个文档就OK了。

n:             直接定位返回。

millis:        看看这个时间真的不敢相信,秒秒杀。

通过这个例子相信大家对索引也有了感官方面的认识了吧。

三:唯一索引

和sqlserver一样都可以建立唯一索引,重复的键值自然就不能插入,在mongodb中的使用方法是:

db.person.ensureIndex({"name":1},{"unique":true})。

四:组合索引

有时候我们的查询不是单条件的,可能是多条件,比如查找出生在‘1989-3-2’名字叫‘jack’的同学,那么我们可以建立“姓名”和"生日“

的联合索引来加速查询。

看到上图,大家或者也知道name跟birthday的不同,建立的索引也不同,升序和降序的顺序不同都会产生不同的索引,

那么我们可以用getindexes来查看下person集合中到底生成了那些索引。

此时我们肯定很好奇,到底查询优化器会使用哪个查询作为操作,呵呵,还是看看效果图:

看完上图我们要相信查询优化器,它给我们做出的选择往往是最优的,因为我们做查询时,查询优化器会使用我们建立的这些索引来创建查询方案,

如果某一个先执行完则其他查询方案被close掉,这种方案会被mongodb保存起来,当然如果非要用自己指定的查询方案,这也是

可以的,在mongodb中给我们提供了hint方法让我们可以暴力执行。

五: 删除索引

可能随着业务需求的变化,原先建立的索引可能没有存在的必要了,可能有的人想说没必要就没必要呗,但是请记住,索引会降低CUD这三

种操作的性能,因为这玩意需要实时维护,所以啥问题都要综合考虑一下,这里就把刚才建立的索引清空掉来演示一下:dropIndexes的使用。

8天学通MongoDB——第四天 索引操作相关推荐

  1. 8天学通MongoDB——第四天 索引操作

    原文:8天学通MongoDB--第四天 索引操作 这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅. 好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性 ...

  2. 转载: 8天学通MongoDB——第三天 细说高级操作

    今天跟大家分享一下MongoDB中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. &l ...

  3. 8天学通MongoDB——第五天 主从复制

    随笔 - 218  文章 - 1  评论 - 3819 8天学通MongoDB--第五天 主从复制 从这一篇开始我们主要讨论mongodb的部署技术. 我们知道sql server能够做到读写分离,双 ...

  4. 转载: 8天学通MongoDB——第七天 运维技术

    这一篇我们以管理员的视角来看MongoDB,作为一名管理员,我们经常接触到的主要有4个方面: 1.  安装部署 2.  状态监控 3.  安全认证 4.  备份和恢复, 下面我们就一点一点的讲解. 一 ...

  5. 转载: 8天学通MongoDB——第六天 分片技术

    在MongoDB里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存 就吃不消了,针对这样的场景我们该如何应对. 一:分片 mong ...

  6. MongoDB 教程四: 高级更改操作

    视频地址:MongoDB 教程四: 高级更改操作 db.collection.update() 说明 db.collection.update(query, update, options) 修改一个 ...

  7. MongoDB系列四(索引).

    一.索引简介 再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似.有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,这能使查找速度提高 ...

  8. 8天学通MongoDB——第二天 细说增删查改

    2019独角兽企业重金招聘Python工程师标准>>> 看过上一篇,相信大家都会知道如何开启mongodb了,这篇就细说下其中的增删查改,首先当我们用上一篇同样的方式打开mongod ...

  9. 8天学通MongoDB——第七天 运维技术

    这一篇我们以管理员的视角来看mongodb,作为一名管理员,我们经常接触到的主要有4个方面: 1.  安装部署 2.  状态监控 3.  安全认证 4.  备份和恢复, 下面我们就一点一点的讲解. 一 ...

最新文章

  1. HCTL-2020正交码读写芯片
  2. 如何使用MFC和类型库创建自动化项目
  3. python使用threading模块实现多线程
  4. android studio table居中代码_五个方法实例代码详解教你在CSS中实现垂直居中
  5. echarts 环形图 默认高亮展示某个数据
  6. optimized mysql_MySQL解释计划中“Select tables optimized away”的含义
  7. python 爬虫视频教学
  8. visio一分二的箭头_visio双箭头怎么画? visio2013绘制双箭头直线的教程
  9. 学材分析计算机一体化,计算机一体化课教案.doc
  10. 18、【易混淆概念集】第十一章2 实施定量风险分析 模拟、敏感性分析、决策树分析 风险应对策略 消极/威胁应对策略 积极/机会风险应对策略 开拓和提高的区别
  11. android 格式化sd咔_在Android手机上永久格式化SD卡
  12. 色彩管理实验 matlab,EFI色彩管理实验指导手册.doc
  13. android 高级工具包,root工具箱app下载
  14. 思科模拟器Cisco Packet Tracer交换机的端口聚合配置
  15. 关联规则Apriori(python实现):Bakery Bussiness Model
  16. c语言的%的转义吗,%20转义(C语言转义字符问题)
  17. 【MATLAB】— xlsread和xlswrite函数
  18. java 生成纯色图片_canvas简单实现纯色背景图片抠图(示例代码)
  19. 宝塔面板 - BT面板 Linux Centos 命令集
  20. ubuntu下修复U盘并格式化

热门文章

  1. es6学习笔记-module_v1.0_byKL
  2. 掉网问题的log分析
  3. 如何在JavaScript中使用自定义事件
  4. sql 删除用户失败
  5. 开源websocket
  6. gdb中看内存(x命令)
  7. 让你的网页达到最好的视觉效果
  8. 静态链接库、动态链接库和动态加载库
  9. TCP 通信过程中各步骤的状态
  10. /etc/profile 和 ~/.profile 区别是全部用户,和单一用户