数据库之索引
一、索引的数据结构
MySQL中索引是一种数据结构,可以理解为 像一本书的目录一样的结构。
B+Tree的理解
B+Tree说白了还是Tree,属于二叉树的高级变体
先了解二叉树
平衡二叉树,能对结构进行左旋、右旋,以达到左子树与右子树 高度差的绝对值不超过1,即高度差为0-1之间。
平衡二叉树的旋转
B+树
数据只存储在叶子节点上,非叶子节点只保存索引信息;
- 非叶子节点(索引节点)存储的只是一个 Flag,不保存实际数据记录;
- 索引节点指示该节点的左子树比这个 Flag 小,而右子树大于等于这个 Flag
- 叶子节点本身按照数据的升序排序进行链接(串联起来);
- 叶子节点中的数据在 物理存储上是无序 的,仅仅是在 逻辑上有序 (通过指针串在一起);
B+树的作用
- 在块设备上,通过 B+树可以有效的存储数据;
- 所有记录都存储在叶子节点上,非叶子(non-leaf)存储索引(keys)信息;
- B+树含有非常高的扇出(fanout),通常超过 100,在查找一个记录时,可以有效的减少IO 操作
B+树的扇出(fan out)
1.该 B+ 树高度为 2
2. 每叶子页(LeafPage)4 条记录
4. 扇出数为 5
5. 叶子节点(LeafPage)由小到大(有序)串联在一起
扇出 是每个索引节点(Non-LeafPage)指向每个叶子节点(LeafPage)的指针
扇出数 = 索引节点(Non-LeafPage)可存储的最大关键字个数 + 1
图例中的索引节点(Non-LeafPage)最大可以存放 4 个关键字,但实际使用了5个节点
B+树的插入
例如插入28
插入90
二、索引的分类
普通索引:即一个索引只包含单个列,一个表可以有多个单列索引
唯一索引:索引列的值必须唯一,但允许有空值
复合索引:即一个索引包含多个列
聚簇索引(聚集索引):并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同的实现,InnoDB 的聚簇索引其实就是在同一个结构中保存了 B-Tree 索引(技术上来说是 B+Tree)和数据行。
说白了就是主键索引,所有的数据都集中在聚集索引的叶子节点上,通过叶子节点上的指针指向物理磁盘
非聚簇索引:不是聚簇索引,就是非聚簇索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~