InnoDB为何不青睐跳表,Redis又怎舍B树?

2026-04-29 05:542阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

哎呀, 聊起 InnoDB 和 Redis 的“偏爱”,我心里总是七上八下的,像是刚打开的盒子里蹦出一只小猫,又像是半夜被闹钟吵醒的梦魇——糊里糊涂又不敢怠慢那个。

先说 InnoDB,为什么它不爱跳表?

共勉。 先抛个大招:磁盘!InnoDB 是磁盘为王的老古董, 硬盘的转头嗡嗡作响,SSD 的闪光灯眨呀眨,它们都不想被乱七八糟的链表拖慢。

InnoDB为什么不用跳表,Redis为什么不用B+树?

性价比超高。 跳表在内存里跑得飞快, 却在磁盘上像蜗牛背着壳爬——每一次指针跳转都要一次随机 I/O,磁头得来回扫来扫去,那叫一个卡!于是 InnoDB 毅然决定:B+ 树才是正道。

B+ 树的优势简直是天经地义:

  • 节点大小恰好和磁盘页对齐,读写一次就能把整层节点塞进页缓存。
  • 叶子节点之间用链表串起来范围查询只要顺序遍历几页就搞定。
  • 多路平衡,让树高保持在 O,深度低到可以直接忽略不计。
  • 并发控制成熟:行锁、MVCC、细粒度锁……这些玩意儿都是围绕 B+ 树设计的。

磁盘友好的特性

哎,对! 页面对齐——每个节点恰好占满 16KB 页面;顺序预读——叶子链表让范围查询几乎是线性扫描;分裂合并——插入删除时只动局部页面不会全局重排。

阅读全文

哎呀, 聊起 InnoDB 和 Redis 的“偏爱”,我心里总是七上八下的,像是刚打开的盒子里蹦出一只小猫,又像是半夜被闹钟吵醒的梦魇——糊里糊涂又不敢怠慢那个。

先说 InnoDB,为什么它不爱跳表?

共勉。 先抛个大招:磁盘!InnoDB 是磁盘为王的老古董, 硬盘的转头嗡嗡作响,SSD 的闪光灯眨呀眨,它们都不想被乱七八糟的链表拖慢。

InnoDB为什么不用跳表,Redis为什么不用B+树?

性价比超高。 跳表在内存里跑得飞快, 却在磁盘上像蜗牛背着壳爬——每一次指针跳转都要一次随机 I/O,磁头得来回扫来扫去,那叫一个卡!于是 InnoDB 毅然决定:B+ 树才是正道。

B+ 树的优势简直是天经地义:

  • 节点大小恰好和磁盘页对齐,读写一次就能把整层节点塞进页缓存。
  • 叶子节点之间用链表串起来范围查询只要顺序遍历几页就搞定。
  • 多路平衡,让树高保持在 O,深度低到可以直接忽略不计。
  • 并发控制成熟:行锁、MVCC、细粒度锁……这些玩意儿都是围绕 B+ 树设计的。

磁盘友好的特性

哎,对! 页面对齐——每个节点恰好占满 16KB 页面;顺序预读——叶子链表让范围查询几乎是线性扫描;分裂合并——插入删除时只动局部页面不会全局重排。

阅读全文