IT评测·应用市场-qidao123.com

标题: MySQL 索引结构浅析 [打印本页]

作者: 东湖之滨    时间: 2023-8-8 14:39
标题: MySQL 索引结构浅析
索引结构


InnoDB B 树


上面是二叉树和红黑树的结构,其实红黑树是一个自平衡二叉查找树,可以用于解决二叉树顺序插入时形成一个有序链表问题。
但是两者都有一个明显缺点,就是当数据量过大时,层级较深,检索速度慢。
下面分析一下 B树(多路平衡查找树)

名词解析:
上面这个 B 树图,度数为 5 也成为 5 阶,最多可以存储 4 个 key,5 个指针。
例如:小于 20 的会走第一个指针找到 【10,15,18】这个子节点,在 20 - 30 之间的会找到 【23,25,28】这个子节点依此推断,如果一个节点 N 个 key,那么就有 N+1 个指针。
这样的数据结构优势非常明显,每一层能存储的数据量增加了,并且有效的降低了树的层级数。

上图是一个 B 数的插入分裂演变过程。
假设这个 B 数的最大度数是 5 阶,那么最多能存储 4 key,5 个指针。
其核心在于插入顺序和分裂过程:简单来说就是按顺序插入,当插入时发现这个节点以及满足 4 个 key 了,那么此时就需要进入到向上分裂过程,这个分裂是从当前节点的中间 key 向上分裂过程。
eg:待插入元素 【2456】,当前节点元素【1800,1888,1980,2000】

InnoDB B+ 数

首先看看经典的 B+ 树结构:

上面这个是经典 B+ 树,其插入顺序和分裂过程跟 B 树类似,主要的区别点有 3 个:
这分裂过程的特点主要结合所有数据都在叶子节点这个特点去理解。
因为可能我待插入数据他会导致节点出现向上分裂的过程,但是因为 B+ 树所有数据都在叶子节点,所以需要将待插入的数据保存在叶子节点中
在 InnoDB 中的 B+ 树结构。


从上图中可以看到 MySQL 针对经典 B+ 树进行了优化(要根据物理存储结构以及保证查询效率)。
首先看看针对数据结构有什么优化:
MySQL 表空间和数据区的概念:
小结:

本次简单的对 B 树,B+ 树,InnoDB B+ 树,进行了简单的一个分析。
为了更好的去理解 InnoDB B+ 树,后续可能还需要去详细理解 B+ 树的具体实现、自平衡的原理(左旋右旋)。
后面准备详细学习一下 MySQL 的调优,从建表规范、查询语句优化、索引优化、分库分表 各个方面进行学习。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4