数据库之索引

一、索引的数据结构
MySQL中索引是一种数据结构,可以理解为 像一本书的目录一样的结构。

B+Tree的理解
B+Tree说白了还是Tree,属于二叉树的高级变体

先了解二叉树

平衡二叉树,能对结构进行左旋、右旋,以达到左子树与右子树 高度差的绝对值不超过1,即高度差为0-1之间。

平衡二叉树的旋转

B+树
数据只存储在叶子节点上,非叶子节点只保存索引信息;

  1. 非叶子节点(索引节点)存储的只是一个 Flag,不保存实际数据记录;
  2. 索引节点指示该节点的左子树比这个 Flag 小,而右子树大于等于这个 Flag
  3. 叶子节点本身按照数据的升序排序进行链接(串联起来);
  4. 叶子节点中的数据在 物理存储上是无序 的,仅仅是在 逻辑上有序 (通过指针串在一起)

B+树的作用

  1. 在块设备上,通过 B+树可以有效的存储数据;
  2. 所有记录都存储在叶子节点上,非叶子(non-leaf)存储索引(keys)信息;
  3. 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)和数据行。
说白了就是主键索引,所有的数据都集中在聚集索引的叶子节点上,通过叶子节点上的指针指向物理磁盘

非聚簇索引:不是聚簇索引,就是非聚簇索引

posted @   vello  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示