Atitit index threod type 索引原理与类型 种类

目录

1.1. 每个文档在经过底层的存储引擎持久化后 1

2. MongoDB索引类型 2

2.1. 包括单字段索引、复合索引、 2

2.2. 多key索引、文本索引等, 2

2.3. 索引通常采用类似btree的结构持久化存储 2

2.4. 复合索引 (Compound Index) 2

3. 其他类型索引 3

3.1. 哈希索引(Hashed Index) 3

3.2. 地理位置索引(Geospatial Index) 3

3.3. 文本索引(Text Index)  fulltext index 3

3.4. Bitmap 3

4. Other 4

4.1.1. 索引额外属性 4

5. Ref 4

  1. 每个文档在经过底层的存储引擎持久化后

,会有一个位置信息,通过这个位置信息,就能从存储引擎里读出该文档。比如mmapv1引擎里,位置信息是『文件id + 文件内offset 』, 在wiredtiger存储引擎(一个KV存储引擎)里,位置信息是wiredtiger在存储文档时生成的一个key,通过这个key能访问到对应的文档;为方便介绍,统一用pos(position的缩写)来代表位置信息。

比如上面的例子里,person集合里包含插入了4个文档,假设其存储后位置信息如下(为方便描述,文档省去_id字段)

位置信息

文档

pos1

{“name” : “jack”, “age” : 19 }

pos2

{“name” : “rose”, “age” : 20 }

pos3

{“name” : “jack”, “age” : 18 }

pos4

{“name” : “tony”, “age” : 21}

pos5

{“name” : “adam”, “age” : 18}

  1. MongoDB索引类型

MongoDB支持多种类型的索引,

  1. 包括单字段索引、复合索引、
  2. 多key索引、文本索引等,

每种类型的索引有不同的使用场合。

  1. 索引通常采用类似btree的结构持久化存储

如果想加速 db.person.find( {age: 18} ),就可以考虑对person表的age字段建立索引

db.person.createIndex( {age: 1} )  // 按age字段创建升序索引

建立索引后,MongoDB会额外存储一份按age字段升序排序的索引数据,索引结构类似如下,索引通常采用类似btree的结构持久化存储,以保证从索引里快速(O(logN)的时间复杂度)找出某个age值对应的位置信息,然后根据位置信息就能读取出对应的文档。

age

位置信息

18

pos3

18

pos5

19

pos1

20

pos2

21

pos4

  1. 复合索引 (Compound Index)

复合索引是Single Field Index的升级版本,它针对多个字段联合创建索引,先按第一个字段排序,第一个字段相同的文档按第二个字段排序,依次类推,如下针对age, name这2个字段创建一个复合索引。

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

上述索引对应的数据组织类似下表,与{age: 1}索引不同的时,当age字段相同时,在根据name字段进行排序,所以pos5对应的文档排在pos3之前。

age,name

位置信息

18,adam

pos5

18,jack

pos3

19,jack

pos1

20,rose

pos2

21,tony

pos4

复合索引能满足的查询场景比单字段索引更丰富,不光能满足多个字段组合起来的查询,比如db.person.find( {age: 18, name: "jack"} ),也能满足所以能匹配符合索引前缀的查询,这里{age: 1}即为{age: 1, name: 1}的前缀,所以类似db.person.find( {age: 18} )的查询也能通过该索引来加速;但db.person.find( {name: "jack"} )则无法使用该复合索引。如果经常需要根据『name字段』以及『name和age字段组合』来查询,则应该创建如下的复合索引

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

  1. 其他类型索引

    1. 哈希索引(Hashed Index)

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

  1. 地理位置索引(Geospatial Index)

能很好的解决O2O的应

用场景,比如『查找附近的美食』、『查找某个区域内的车站』等。

  1. 文本索引(Text Index)  fulltext index

能解决快速文本查找的需求,比如有一个博客文章集合,需要根据博客的内容来快速查找,则可以针对博客内容建立文本索引。

  1. Bitmap
  1. Other

    1. 索引额外属性

MongoDB除了支持多种不同类型的索引,还能对索引定制一些特殊的属性。

  • 唯一索引 (unique index):保证索引对应的字段不会出现相同的值,比如_id索引就是唯一索引
  • TTL索引:可以针对某个时间字段,指定文档的过期时间(经过指定时间后过期 或 在某个时间点过期)
  • 部分索引 (partial index): 只针对符合某个特定条件的文档建立索引,3.2版本才支持该特性
  • 稀疏索引(sparse index): 只针对存在索引字段的文档建立索引,可看做是部分索引的一种特殊情况
  1. Ref

MongoDB索引原理 | MongoDB中文社区

Atitit index threod type 索引原理与类型 种类 目录 1.1. 每个文档在经过底层的存储引擎持久化后 1 2. MongoDB索引类型 2 2.1. 包括单字段索引、复合索引相关推荐

  1. 理论+实操: MySQL索引与事务、视图、存储过程(软件开发用的多)、存储引擎MyISAM和InnoDB

    文章目录 一:索引的概念 二:索引的作用 三:索引的分类 3.1 普通索引 3.2 唯一性索引 3.3 主键 3.4 全文索引 3.5 单列索引与多列索引 四:创建索引的原则依据 五:创建索引的方法 ...

  2. Mysql 索引 总结 —— 概述 || 索引优势劣势|| 索引结构(索引是在MySQL的存储引擎层中实现的)|| BTREE 结构||B+TREE 结构||MySQL中的B+Tree||索引分类

    索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序). 在数据之外,数据库系统还维护者满足特定查找算法的数据结构, 这些数据结构以某种方式引用(指向 ...

  3. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

    MySQL是目前使用最广的开源数据库,不管从装机量.使用人群.专职人员.社区发展,还是基于MySQL的其他分支,都是当之无愧的No.1. 本文将从以下4个方面,带你搞透MySQL体系结构与存储引擎. ...

  4. 你连原理都还没弄明白?java文档注释快捷键idea

    蚂蚁金服电话一面 第二天早上10点第一轮电话面试,我们大约聊了半个小时,关于学历工作经验这些都没有问到,对方关注的是一些基本的知识,具体记得的几个问题: Spring或者数据库的事物隔离级别和传播特性 ...

  5. 编辑器未包含main类型_利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中...

    通过 API,开发人员可以将 ONLYOFFICE 编辑器集成到网站和利用程序设计语言编写的应用程序中,并能配置和管理编辑器. 来源:https://linux.cn/article-13037-1. ...

  6. 微型计算机原理risc,微型计算机原理习题及解答-20210409003329.docx-原创力文档

    ???? ???? 微机原理习题 1.微处理器.微型计算机和微型计算机系统三者之间冇什么不同? 答: 微型计算机系统:包括微型计算机的硬件系统利必箜的系统软件. 微型计算机的换件系统包括:微型计算机和 ...

  7. 计算机原理 对口单招,对口单招计算机原理计算专题练习-20210622114415.pdf-原创力文档...

    对口单招计算机原理计算专题练习 一.数制转换类 1.十六进制数 1000 转换成十进制数是 ______ . A .4096 B .2048 C .1024 D . 8192 2 .十进制数 25.1 ...

  8. 大连理工大学计算机原理实验,大连理工大学计算机原理实验第一次实验-20210406081759.pdf-原创力文档...

    大连理工大学实验报告 实验室(房间号) : 420 实验台号码: 班级: 电通 1402 姓名: 糜智华 指导教师签字: 成绩: 实验 一 汇编语言上机操作 &动态调试程序 DEBUG的使用 ...

  9. 简述计算机数控系统的工作原理,计算机数控系统复习题-20210321010307.docx-原创力文档...

    "计算机数控系统"复习题 一.填 空: 1.数控技术的发展方向是高精度.高速度.高可靠性.多功能和小型化.智 能化.数控网络化和( 开放式)等方向.开放式的数控系统应是一个 ( 模 ...

  10. 2015年计算机网络原理真题,2015年4月04741计算机网络原理试题及答案-20210413074741.docx-原创力文档...

    全国2015年4月高等教育自学考试计算机网络原理试题 一.单项选择题(本大题共24小题,每小题 1分,共24分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将 "答题纸 ...

最新文章

  1. 刘未鹏谈如何学习算法
  2. Spring入门(三)之IoC
  3. 从十四五规划看 物联网(NB-IoT、Cat.1、5G)将何去何从?
  4. C++和C语言函数相互调用
  5. Python爬虫入门四urllib库的高级用法
  6. C++ 序列化和反序列化学习
  7. mysql5.1.7升级到5.6_1 MySQL5.6 升级到 5.7 版本
  8. windows下多个静态库合并的方法
  9. bagging算法_集成学习(Ensemble Learning)——Bagging与Random Forest(1)
  10. TP-LINK 无线路由器桥接步骤
  11. java 结束循环_java如何终止多层循环
  12. [笔记]如何解决Your project contains C++ files but it is not using a supported native build system
  13. 此更新不适用于您的计算机 kb4012212,这才是正确的全球勒索软件处置方法(含Windows补丁)...
  14. c语言药店管理系统设计,药店管理系统
  15. ds18b20温度转换指令_【原创】基于单片机的DS18B20温度显示
  16. 香农编码译码c语言,实验三香农编码.doc
  17. Whiten process——数据的白化处理
  18. wpf label下划线不显示的问题
  19. 软件工程基于场景建模 习题
  20. 个人IP「Android大强哥」上线啦!

热门文章

  1. Linux 常用函数
  2. 右键新建文件夹_教你修改Windows万年不变的黄色文件夹,让文件也不枯燥
  3. kafka 拉取的数据排序_Kafka 源码解析之 Consumer Poll 模型(七)
  4. html字体加粗代码_9102年了,公众号还不会换字体?
  5. micropython文件上传软件_MicroPython
  6. vs code html插件_VS插件CodeRush全新发布v20.1.7|支持HTML
  7. SQL Server查询所有的表名、字段名、注释
  8. Android源码分析:Activity启动流程
  9. 《PhoneGap移动应用开发手册》——1.5节获取设备位置传感器信息
  10. @OneToOne or @ManyToOne on references an unknown entity: