(一)索引基本介绍

       索引是提高查询查询效率最有效的手段。索引是一种特殊的数据结构,索引以易于遍历的形式存储了数据的部分内容(Mongodb和Mysql使用B+树)(如:一个特定的字段或一组字段值),索引会按一定规则对存储值进行排序,而且索引的存储位置在内存中,所在从索引中检索数据会非常快。如果没有索引,MongoDB必须扫描集合中的每一个文档,这种扫描的效率非常低,尤其是在数据量较大时。

延伸:BTree和B+Tree的含义和他们的区别

最大的区别在于B+Tree内部节点不保存数据,只保存索引信息,所有数据都保存在叶子节点。

B-Tree    简单理解: 二分查找;

B+    简单理解:内节点不存储数据了,改成存储内节点,一次IO操作,可以查到更多的数据,最终IO次数比B-Tree少,效率更高了;

(二)索引类型

MongoDB支持多种类型的索引,包括单字段索引、复合索引、多key索引、文本索引等,每种类型的索引有不同的使用场合。

(1)单字段索引(针对一个字段)

(2)复合索引(针对多个索引)

db.person.createIndex( {age: 1, name: 1} )

(3)多key索引(Multikey Index)

{"name" : "jack", "age" : 19, habbit: ["football, runnning"]}

db.person.createIndex( {habbit: 1} ) // 自动创建多key索引

(4)哈希索引(Hashed Index)

是指按照某个字段的hash值来建立索引,目前主要用于MongoDB Sharded Cluster的Hash分片,hash索引只能满足字段完全匹配的查询,不能满足范围查询等

(5)文本索引和地理索引

MongoDb 索引原理相关推荐

  1. MongoDB · 引擎特性 · MongoDB索引原理

    MongoDB · 引擎特性 · MongoDB索引原理 数据库内核月报 原文链接 http://mysql.taobao.org/monthly/2018/09/06/ 为什么需要索引? 当你抱怨M ...

  2. MongoDB索引原理及实践

    背景 数据库的演进 随着计算机的发展,越来越多的数据需要被处理,数据库是为处理数据而产生.从概念上来说,数据库是指以一定的方式存储到一起,能为多个用户共享,具有更可能小的冗余,与应用程序彼此独立的数据 ...

  3. MongoDB索引原理和具体使用

    1. MongoDB 索引是用来干嘛? 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常 ...

  4. 学习 | MongoDB 索引和排序

    小小又开始学习了,这次学习的内容是索引和排序. 索引 先给users集合插入两条记录,然后用users集合来进行索引管理的演示: > user1={"name":" ...

  5. MongoDB索引优化

    MongoDB 索引优化 1. 一图看懂索引原理 2. 查看执行计划 3. 如何建索引 3. 索引的优化 4. 索引的选择机制 5. 优化实践 country_themes 优化 wallpapers ...

  6. 【大数据存储技术】第7章 MongoDB 的原理和使用

    文章目录 第7章 MongoDB 的原理和使用 7.1 概述 7.2 MongoDB 技术原理 7.2.1 文档和集合 7.2.2 分片机制和集群架构 7.2.3 CouchDB 简介 7.3 安装配 ...

  7. Mysql索引原理剖析与优化策略

    Mysql索引原理剖析与优化策略 1.索引的本质  在⽣产环境中,随着数据量不断的增⻓,SQL执⾏速度会越来越慢,常⻅的⼿段就是通过索引来提升查询速度,那么究竟为什么要添加索引?应该如何正确添加索引? ...

  8. M14-MongoDB索引原理及使用

    存储引擎 network-Query Pan-Storage KV Interface-WiredTiger 核心数据结构B-Tree MongoDB数据结构组织 索引原理总结 MongoDB索引类型 ...

  9. MongoDB分布式原理以及read-preference和readConcern解决读写一致性问题

    MongoDB词汇表: https://docs.mongodb.com/manual/reference/glossary/#term-replica-set MongoDB分布式原理 primar ...

最新文章

  1. Thread类中yield方法
  2. pip无法更新_TensorFlow 2.0「开发者预览版」上线,内容每日更新
  3. 如何查看某个端口被哪个进程占用
  4. AI理论知识基础(21)-对变化建模-用差分方程-动力系统及常数解
  5. VTK:二次方用法实战
  6. matlab lmi 定义一个任意方阵,matlab中LMI应用说明
  7. 回溯算法(Backtracking Algorithm)之八皇后问题
  8. 把本地仓库建到github
  9. geddy mysql_以ToDoList应用来学习Geddy
  10. C++設計模式——策略模式
  11. 显示桌面图标不见了的解决方法
  12. QTouch Linux 组态软件
  13. windwos11降级,重装Windows10
  14. 使用中控指纹采集器开发指纹识别案例V1.0
  15. Pycharm进入debug模式后一直显示collecting data解决方法
  16. Python爬取天堂网图片
  17. TCP非持久连接、持久性连接(流水线方式、非流水线方式)例题
  18. 5G基站到底长啥样?和4G有啥区别?
  19. 正序,负序,零序分量的产生与计算
  20. credssp(credssp加密数据库修正 server2016)

热门文章

  1. Java 设置Excel页面背景
  2. logit模型应用实例_BERT模型蒸馏有哪些方法?
  3. 如何以十六进制查看图片?
  4. 建表原则——参照完整性
  5. ubuntu进入单用户模式
  6. 降水集中度MATLAB代码,我国区域降水量与海拔高度关系的统计分析.doc
  7. LV2之-----canvas 画布实现 自转时钟 大转盘
  8. java源代码位置_Java源代码放置位置?
  9. 微机:存储器全译码产生片选信号的题目
  10. TensorFlow 2.0 beta版本来了!