Day67【概念解析】 MySQL Index
行业概念

Day67【概念解析】 MySQL Index

· 约 1,821 字 · 阅读约 10 分钟
目录

整理定义

什么是索引

一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本500页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。

MySQL的索引

在MySQL中,索引是一种数据结构,它通过形成代表特定列或一组列的所有值的树结构(B树),为表的行提供快速查找能力。

InnoDB表总是有一个代表主键的聚簇索引。它们也可以有一个或多个定义在一个或多个列上的辅助索引。根据它们的结构,辅助索引可以被分类为部分索引、列索引或复合索引。

索引是查询性能的关键方面。数据库架构师设计表、查询和索引,以便快速查找应用程序所需的数据。理想的数据库设计在实际中使用覆盖索引;查询结果完全由索引计算得出,无需读取实际的表数据。每个外键约束也需要一个索引,以高效地检查父表和子表中是否存在值。

复述展开

在MySQL中,有以下几种索引:

B-Tree 与 B+Tree

B-Tree(平衡树)和B+Tree是两种常用的索引和数据结构,它们在数据库系统中广泛应用于数据的组织、管理和索引。

B-Tree

image

B-Tree是一种自平衡的树数据结构,它维持数据的排序,允许搜索、顺序访问、插入和删除在对数时间内完成。B-Tree的特点包括:

  • 每个节点有多个孩子,节点中的键值按顺序排列。

  • 树的所有叶子节点都在同一层。

  • 节点中的键值数目有一个上限和下限(除了根节点和叶子节点)。

  • B-Tree通过分裂和合并节点来维持平衡。

B+Tree

image

B+Tree是B-Tree的一个变种,它具有B-Tree的所有特性,但在其结构上有所不同:

  • 所有的数据记录都存储在叶子节点上,叶子节点形成了一个链表,便于进行全范围扫描。

  • 非叶子节点(内部节点)仅存储键值信息,不存储数据记录,这意味着相比于B-Tree,B+Tree可以有更高的分支因子,使得树更加矮胖,减少了磁盘I/O次数。

  • 叶子节点之间通过指针连接,这提供了顺序访问数据的能力。

B-Tree与B+Tree的区别

  • 数据存储:B-Tree的数据存储在每个节点上,而B+Tree的数据仅存储在叶子节点上。

  • 树的高度:B+Tree通常更矮胖,因为内部节点不存储数据,可以有更多的子节点。

  • 范围查询:B+Tree由于叶子节点的链表结构,使得范围查询更加高效。

  • 磁盘读写:B+Tree的查询性能更加稳定,因为所有查询都要查找到叶子节点,而B-Tree的查询可能在非叶子节点就结束了。

为什么MySQL选择使用B+Tree

MySQL选择使用B+Tree作为索引结构,主要是因为B+Tree在数据库索引中的几个优势:

  • 高效的范围查询:由于叶子节点的链表结构,B+Tree特别适合处理范围查询,这在数据库操作中非常常见。

  • 更少的磁盘I/O:B+Tree的内部节点不存储数据,可以拥有更多的分支,这减少了树的高度,从而减少了磁盘I/O次数,提高了查询效率。

  • 查询性能稳定:B+Tree的所有查询都要走到叶子节点,这使得每次查询的磁盘读取次数相对固定,性能更加稳定。

理解体会

理解MySQL,必须要学习好MySQL中的索引,知道索引的数据结构,才能更好的对其进行优化与调整。

参考

相关文章