跳转到内容
唯一赫兹
返回

MySQL 为什么使用 B+ 树而不是跳表?

跳表是什么

B+树和跳表的区别

InnoDB 为什么选择 B+树?

  1. 对于查询数据:B+树的查询性能更好
    • B+树每个节点的大小为 16KB,所以每个节点的分叉数可以非常多(1000+),3 层左右就可以存储 2000 万的数据,磁盘 I/O 以每个节点为单位,所以查询时只需要最多 3 次磁盘 I/O
    • 而跳表如果要存储 2000 万数据,大约需要 24 层(因为要达到二分的效果,2 的 24 次方),查询时需要 24 次磁盘 I/O
  2. 对于插入数据:跳表的写入性能更好
    • B+树的插入为了维持平衡,需要分裂、重构节点
    • 跳表则是独立插入,根据随机函数决定层数 B+树在写入时只需修改 1~2 个页,同时InnoDB 在 B+树上的写入进行了很多优化,比如 WAL 批量提交,写入性能相较于跳表差距不大,综合考量下 B+树更优。

Redis 的 Zset 为什么选择跳表?

Redis 是内存数据库,所以没有磁盘 I/O 瓶颈,而且实现更简单同时性能不输平衡树。



上一篇
Java 集合
下一篇
MySQL 查询慢的原因