美文网首页
索引如何提升查询效率

索引如何提升查询效率

作者: pzzzzzzzzz | 来源:发表于2020-09-18 10:51 被阅读0次

MySQL的索引是如何提高查询效率的?

一.索引是什么?

索引是数据库中用来提高查询效率的技术,类似于目录。如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。如果表中的数据很少,使用索引反而会降低查询效率。并且索引会占用磁盘空间,一般只针对查询时常用的字段创建索引。索引分为聚集索引和非聚集索引,通过主键创建的索引称为聚集索引,聚集索引中保存数据,只要给表添加主键约束,则会自动创建聚集索引;通过非主键字段创建的索引称为非聚集索引,非聚集索引中没有数据。还可以通过多个字段来创建复合索引。

二.MySQL中存储索引用的是什么结构?

MySQL中存储索引用的一般都是B+树。它的数据都存放在叶子节点中,同时叶子节点之间还添加了指针形成了链表。有点像HashMap的底层实现,数组 + 链表的结构。

上图是一个4路B+树,可以清楚的看到,所有的数据都存放在叶子节点上,并且叶子节点之间有指针链表相连。

三.为什么要用B+树?

首先,B+树是平衡树。树的查询效率是log(n),n为树的高度。如果使用非平衡树,如二叉树。那么在特殊情况,如插入的数据是有序的,会出现什么情况呢?

二叉树发生了退化,变成了链表,树的高度变高了,影响了查询的效率。由于B+树是平衡树,保证了树的高度是最优的,所以不会出现上述的退化情况。上文展示了一个4路的B+树,可以看出当路数越多时,树的高度是越低的,那么问题来了,为什么不设计一个无限多路的B树来降低树高度,从而提升查询效率呢?先来看看一个无限多路的B树是什么样的。

不限路数,B树就退化成了一个数组。那么会出现什么问题呢?数据库的索引是存储在硬盘上的,如果数据量大的话,不一定可以一次性加载到内存中。这时候,多路存储的好处就体现出来了,可以每次加载树的一个节点,然后一步步往下找。比如一个三路的B树,每个节点最多有两个数,查找的时候每次载入一个节点进内存就行,就不会出现数据量过大无法加载到内存中的情况。在业务场景中查询数据时,往往是查询多条数据,比如查询最近修改过的10条数据,B+树在B树的基础上进行了优化,B+树的所有数据都在叶子结点,同时有链表结构,只需要找到首尾,就可以把所有的数据找出来了。综上述所述,MySQL中存储索引用B+树的好处主要是降低树高度提高查询效率、多路设计保证硬盘到内存的加载、叶子节点存储数据并且加了指针形成链表在范围查找时只需定位首尾就可以取出所需数据。

相关文章

  • 索引如何提升查询效率

    MySQL的索引是如何提高查询效率的? 一.索引是什么? 索引是数据库中用来提高查询效率的技术,类似于目录。如果不...

  • MongoDB(index)

    索引(index) 索引 index经常用于常用的查询,如果设计得好,在创建索引之后的查询会有提升效率的效果。但是...

  • day04 索引 约束 触发器

    1 索引 什么是索引 索引的分类 创建索引 删除索引 合理使用索引提升查询效率 2 约束 什么是约束 约束的类型 ...

  • oralce索引及视图

    索引作用:提升查询效率创建索引:create index 索引名 on 表名(字段名)oracle默认将为新创建的...

  • Hbase相关组件分析

    Hbase hbase默认只有rowkey主键索引,所以使用其他字段查询效率并不高,若想提升查询效率,使用以下两种...

  • 第31期:索引设计(索引数量探讨)

    一般提到索引,大家都只关注索引的优点,一个优秀的索引的确会让查询请求的效率大幅提升、亦或是大幅提升带有索引键进行过...

  • MYSQL之常用索引类型

    废话不多说,直接干活。 索引优缺点 优:  提高查找效率(提升查询速度、加快表连接)缺:  创建以及维护索引耗费时...

  • 浅析索引技术

    1. 认识索引 索引是一种常见的数据库优化手段,设计优良的索引能够大幅提升数据库的查询效率,提升并发能力。 举一个...

  • 索引

    查询效率 覆盖索引——可以减少树的搜索次数,显著提升性能,常见的性能优化手段。----有没有必要建立联合索引,达到...

  • 索引的使用

    索引的本质 索引就是帮助数据库管理系统高效获取数据的数据结构。 思考? 索引用得好,可以将 SQL 查询的效率提升...

网友评论

      本文标题:索引如何提升查询效率

      本文链接:https://www.haomeiwen.com/subject/kgndyktx.html