06 B+树索引

vvEcho 2024-01-20 14:08:37
Categories: Tags:

B+树索引是一个多叉平衡树,它的叶子节点是数据节点,非叶子节点是索引节点。

其中非叶子节点存储了所有的排序号的索引信息,叶子节点存储了所有的数据信息;非叶子节点是一个双向循环链表,这种设计时候范围和顺序访问

B+树索引是InnoDB这种存储引擎所使用的索引结构,而InnoDB支持事务,请你尝试说明B+树和事务直接的关系

  1. InnoDB的隔离级别(如可重复读)依赖B+树实现间隙锁(Gap Lock)和Next-Key Lock,防止幻读。例如:
    当执行SELECT ... FOR UPDATE时,B+树可快速定位索引范围,锁定符合条件的行及间隙,阻止其他事务插入符合条件的新数据。

若没有B+树的高效索引,锁定范围可能退化为全表扫描,导致性能骤降

  1. mysql通过redolog和undolog是实现事务的并发控制的,在快照读是可以通过B+树索引快速定位可见的数据版本;当前读时,对于数据库的更新操作,B+树的叶子节点存储的最新版本,旧版本可以通过指针回溯,避免了读写冲突

  2. B+树将数据存储在叶子节点,而索引存储在非叶子节点,确保主键查询只需要一次磁盘io, 这使得数据库的事务操作能通过redolog快速持久化

  3. B+树的叶子节点对应具体行数据,InnoDB可以针对某个行来进行加锁避免锁全表;是锁的粒度最小化,提高了并发性能

  4. 在进行事务回滚是,B+树索引可以快速定位回归范围且因为有序性,使得回滚操作只是局部操作避免全表遍历