Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql索引底层数据结构

MySQL数据库索引及底层数据结构详解

作者:惊骇世俗王某人

MySQL默认使用B+树索引和InnoDB引擎,索引通过有序结构加速数据检索,但增加存储与维护成本,B+树优化了磁盘读写与范围查询效率,成为主流选择,本文介绍MySQL数据库索引及底层数据结构的相关知识,感兴趣的朋友一起看看吧

MySQL默认使用的索引底层数据结构是B+树,默认存储引擎是InnoDB引擎。

这是MySQL文档,有需要的自己浏览。

https://dev.mysql.com/doc/refman/8.0/en/

接下来我们步入今天的正题:

1. 什么是索引

索引的优缺点:

优点

缺点

索引的数据类型:

MySQL支持多种索引类型,每种类型适用于不同的场景和需求。

1. 普通索引 (INDEX / KEY)

2. 唯一索引 (UNIQUE INDEX)

3. 主键索引 (PRIMARY KEY)

4. 全文索引 (FULLTEXT INDEX)

5. 组合索引 (复合索引)

6. 空间索引 (SPATIAL INDEX)

7. 前缀索引

8. 哈希索引

9. 覆盖索引

注意一点:聚簇索引(Clustered Index)和非聚簇索引(Non-clustered Index)虽然也称之为索引,但和这些分类有很大的区别。

核心原因还是因为:分类维度不同

未单独列为类型的其他原因:

2. 索引的底层数据结构

MySQL索引使用多种数据结构实现,不同的存储引擎采用不同的索引结构来优化查询性能。

常用的数据结构有:

MySQL主要就是使用B+树。

在了解B树和B+树之前,我们先来了解一下二叉树:

二叉树(二叉搜索树)

优点:

  1. 逻辑简单:易于理解和实现
  2. 有序性:中序遍历可得有序序列
  3. 二分查找:理想情况下查询效率高

缺点:

下面就是最坏情况下的二叉树,直接演化为了一个链表形式。

B树(B-Tree)

B-Tree,B树是一种自平衡的树数据结构,相对于二叉树,B树每个节点可以有多个分支,即多叉。它保持数据有序,并允许进行高效的搜索、顺序访问、插入和删除操作。

以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key

B树的主要特性:

B+树(B+Tree)

B+Tree是在BTree基础上的一种优化,具有比B树更适合外部存储的特性,InnoDB存储引擎就是用B+Tree实现其索引结构。

B+树的主要特点:

B+树与B树的比较

特性B树B+树
数据存储所有节点都可存储数据仅叶子节点存储数据
查找性能可能提前终止(非叶子节点找到)必须到达叶子节点
范围查询需要中序遍历通过叶子链表高效扫描
空间利用率内部节点存储数据占用更多空间内部节点更紧凑
稳定性查询路径长度不一致所有查询路径长度相同
实现复杂度相对简单相对复杂(需维护叶子链表)

总的来说,由于B+树独特的数据存储方式:

3.总结

3.1 什么是索引?

3.2 索引的底层数据结构?

MySQL的InnoDB引擎采用的B+树的数据结构来存储索引

3.3 为什么 B+Tree 是主流?

到此这篇关于MySQL数据库索引及底层数据结构详解的文章就介绍到这了,更多相关mysql索引底层数据结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文