MySQL索引数据结构详解(6大数据结构图解)

MySQL索引数据结构详解(6大数据结构图解)-mikechen

掌握好MySQL索引数据结构,可以更好的学习MySQL,下面我重点详解MySQL索引数据结构@mikechen

MySQL索引简介

MySQL索引是一种用于提高数据库查询性能的数据结构,它允许快速访问数据库表中的数据。

MySQL索引中常见的数据结构有以下几种:

  • Hash表
  • 二叉树
  • 红黑树
  • B-Tree
  • B Tree

下面我分别详解。

 

MySQL索引数据结构

B-Tree索引

B-Tree,全称是Balanced Tree,是一种自平衡的树结构,通常是多叉树。

如下图所示:

MySQL索引数据结构详解(6大数据结构图解)-mikechen

所具有的特点:

  • 1 叶节点具有相同的深度,叶节点的指针为空;
  • 2 所有索引元素不重复;
  • 3 节点中的数据索引从左到右递增排列。

工作原理

B-Tree索引通过将数据按键值顺序存储在树结构中来提高查询性能。

树的根节点始终指向最小值,而叶子节点包含数据行或指向数据行的指针,中间节点包含索引键值和子节点的引用。

这种结构允许在平均O(log n)时间内进行查找、插入和删除操作,其中n是索引中的数据行数。

B-Tree索引对于范围查询非常有效,因为它们具有有序性。

 

B Tree索引

B Tree是一种B-Tree的变种,更适合数据库索引。

如下图所示:

MySQL索引数据结构详解(6大数据结构图解)-mikechen

具有以下特点:

1.平衡性

B Tree是一种自平衡树结构,确保树的高度保持相对较低。

这意味着在树中执行查找、插入和删除操作的时间复杂度是O(log n)。

2.有序性

B Tree的叶子节点之间通过双向链表连接成一个有序链表,这个有序性使得范围查询变得非常高效,因为可以轻松地按顺序遍历叶子节点。

 

3.所有数据都在叶子节点

B Tree的所有数据行都存储在叶子节点中,而非叶子节点仅存储索引信息,这有助于节省内存,因为非叶子节点的数量相对较少。

 

4.非叶子节点包含索引键值

非叶子节点包含索引键值和指向子节点的引用,这些键值用于指导查询操作,以决定应该向左还是向右子树继续查找。

 

5.适用于范围查询和排序

由于B Tree的有序性,它非常适合处理范围查询和排序操作,范围查询的性能非常高,因为可以顺序遍历叶子节点。

 

6.适用于磁盘存储

B Tree的结构特点使其特别适用于磁盘存储,因为它可以减少磁盘I/O次数,B Tree的叶子节点通常在磁盘上是连续存储的,这有助于减少寻道时间。

 

哈希索引

哈希索引使用哈希函数将索引键映射到特定的位置,通常是一个哈希表。

如下图所示:

MySQL索引数据结构详解(6大数据结构图解)-mikechen

工作原理

哈希索引非常适合精确匹配查询,通过索引的key进行一次hash计算,就可以快速获取磁盘文件指针,对于指定索引查找文件非常快。

但不适用于范围查询,有时候也会出现Hash冲突的情况。

 

二叉树

二叉树的特点:左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据。

如下图所示:
MySQL索引数据结构详解(6大数据结构图解)-mikechen

其特点包括以下几个方面:

1.节点结构

二叉树的每个节点最多有两个子节点,一个称为左子节点,另一个称为右子节点。

2.根节点

二叉树有一个根节点,它是树的顶部节点,没有父节点。

3.叶子节点

叶子节点是没有子节点的节点,即左子节点和右子节点都为空,它们位于树的末端。

4.父节点和子节点

除了根节点和叶子节点,每个节点都有一个父节点和零个、一个,两个子节点。

5.深度

一个节点的深度是指从根节点到该节点的路径的边数,根节点的深度为0,子节点的深度为其父节点深度加1。

6.高度

二叉树的高度是指树中任意节点的深度的最大值,它表示树的层数。

 

红黑树

红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,如下图所示:

MySQL索引数据结构详解(6大数据结构图解)-mikechen

它具有以下特点:

1.节点着色

每个节点都有一个颜色,通常为红色或黑色。

2.根节点

根节点是黑色的。

3.叶子节点

所有叶子节点都是黑色的空节点(NIL节点),也称为外部节点或哨兵节点。它们不包含数据,只用于树的结构。

4.颜色规则

  • 每个节点要么是红色,要么是黑色。
  • 红色节点的子节点必须是黑色的。
  • 从根节点到叶子节点的每条路径上,黑色节点的数量必须相同,这确保了树的高度相对平衡。

 

全文索引

全文索引用于全文搜索,通常基于特殊的数据结构,如倒排索引(Inverted Index)。

MySQL索引数据结构详解(6大数据结构图解)-mikechen

工作原理

全文索引允许在文本字段中进行关键字搜索,而不仅仅是精确匹配。

它将文本数据分成单词或词组,并为每个词建立索引,以便快速查找相关文档。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法