`
baobeituping
  • 浏览: 1071586 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MongoDB——第四天 索引操作

 
阅读更多

 这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅。

    好,今天分享下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的使用。

分享到:
评论

相关推荐

    数据结构算法

    快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四天 索引操作 8天学通...

    mongodb 数据库基本操作.doc

    为了能够与MongoDB交互并执行各种数据库操作,首先需要通过官方提供的驱动程序或其他第三方库建立连接。 - **使用官方驱动程序连接**: - **Python环境下的连接方式**:推荐使用`pymongo`库。安装该库后,可以通过...

    教大家8天学通MongoDB——第一天 基础入门篇

    本教程的目的是在8天内帮助初学者掌握MongoDB的基础知识,第一天主要讲解入门内容。 首先,要开始学习MongoDB,你需要从官方网站下载适合你系统的安装包。MongoDB提供32位和64位版本,32位版本的最大存储限制是2GB...

    MongoDB_two_MongoDB_

    4. 查询操作:学习查询语法,包括查询一个或多个字段,使用条件表达式,以及如何使用投影来选择返回的字段。 5. 更新与删除:了解如何更新文档的部分内容,以及如何删除文档和集合。 6. 键与索引:讨论唯一性键、...

    2021Java字节跳动面试题——面向字节_MongoDB.pdf

    ### 2021Java字节跳动面试题——面向字节_MongoDB.pdf #### 知识点一:NoSQL数据库与RDBMS的区别及其应用场景 - **NoSQL数据库含义**:NoSQL(Not Only SQL)指的是非关系型数据库,这类数据库与传统的关系型...

    MongoDB document

    标题“MongoDB Document”直接指向了MongoDB的核心概念之一——文档。 #### 描述:MongoDB Develop Document **描述**部分提到的是“MongoDB开发文档”,这表明文档主要面向开发者群体,旨在为他们提供深入理解...

    ASP,NET源码——[搜索链接]网博垂直搜索引擎完全开源版.zip

    4. **查询解析与排序**:用户输入的查询需要被解析成对索引的操作。这包括关键词提取、分词、布尔运算等。之后,根据相关性算法(如TF-IDF、BM25)对结果进行排序。 5. **结果显示**:最后,将搜索结果以用户友好的...

    nosql 入门教程

    第4章 理解存储架构 62 4.1 使用面向列的数据库 63 4.1.1 使用关系型数据库中的表格和列 63 4.1.2 列数据库对比RDBMS 65 4.1.3 列数据库当做键/值对的嵌套映射表 67 4.1.4 Webtable布局 70 4.2 HBase分布式...

    Python项目案例开发从入门到实战源代码第5章 爬虫应用——校园网搜索引擎

    Python的`sqlite3`库可处理轻量级数据存储,对于大型项目,可能需要用到`MySQL`或`PostgreSQL`等关系型数据库,或者`MongoDB`这样的非关系型数据库。 7. **搜索引擎原理**:理解TF-IDF、BM25等文本相似度算法,这些...

    本科毕业设计——校园搜索引擎.zip

    4. **数据库管理**:存储和管理索引数据,可能使用关系型数据库(如MySQL)或非关系型数据库(如MongoDB),需要掌握SQL查询和NoSQL数据模型。 5. **前端开发**:构建用户友好的搜索界面,可能涉及HTML、CSS、...

    mongoDB-guardar-datos

    MongoDB还支持复杂的查询和更新操作,包括使用聚合框架进行数据分析、创建索引以优化查询性能,以及使用正则表达式、数组操作符等进行高级查询。 在实际应用中,通常会使用MongoDB的驱动程序,如MongoDB Node.js...

    数据库知识了解——web数据库

    - **范式理论**:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,指导数据库表结构设计。 - **索引优化**:创建合适的数据索引,提高查询速度。 6. **Web数据库安全**: - **权限管理**:设置不同级别的...

    PyPI 官网下载 | pymongo-3.2.1-py3.2-win32.egg

    在这个案例中,我们关注的是名为“pymongo-3.2.1-py3.2-win32.egg”的压缩包,它是PyPI上一个针对Python 3.2和Windows平台的MongoDB驱动程序——pymongo的特定版本。 MongoDB是一种流行的NoSQL数据库,以其灵活性、...

    java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用(csdn)————程序..pdf

    这个系统设计为高可用性,适合高并发场景,包含了丰富的功能模块,如会员管理、第三方登录、第三方支付、订单处理、分销系统、文章管理、系统设置以及流量分析等。 系统的技术栈主要包括以下几个方面: 1. **...

    Node.js和MongoDB实现简单日志分析系统

    Node.js和MongoDB是目前比较流行的两个技术栈,它们可以用来构建各种应用,包括日志分析系统。本文介绍了一个通过Node.js服务器端处理和MongoDB存储日志,并通过客户端进行日志数据的可视化展示的简单日志分析系统的...

    java实现仿照百度文库功能——源代码+文档

    9. **性能优化**:随着文档数量的增长,需要考虑缓存策略、索引优化和负载均衡等技术,以保证系统的高效运行。 10. **文档转换**:为了统一预览体验,可能需要将多种格式的文档转换为统一格式,如HTML。这可能需要...

    database数据库课件

    4. 规范化理论:如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF(博科斯范式),用于减少数据冗余,提高数据一致性。 四、数据库优化 1. 索引:加速数据查询,提高数据库性能的关键技术,分为唯一索引...

    Python项目案例开发从入门到实践.rar

    4. **第5章 爬虫应用——校园网搜索引擎** 这一章深入到更复杂的爬虫项目,可能是建立一个小型的搜索引擎,涉及到网页爬取、数据存储(如SQLite或MongoDB)、索引构建以及搜索算法的实现。这需要对网络爬虫、数据库...

    数据库习题答案.zip

    5. **数据库范式**:文档可能会讨论数据库正常化的不同范式,如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF,以及它们在减少数据冗余和提高数据独立性中的作用。 6. **索引**:索引是提高数据库查询...

Global site tag (gtag.js) - Google Analytics