B+树更适合磁盘IO
B+Tree一个节点是一个page,是一种多叉树结构,每个结点都是一个16k的数据页,能存放较多索引信息。一次IO一个page,大大节省了磁盘IO的操作。
B+Tree一个page 能存放较多索引信息 ,所以树的层数比较低, 三层左右就可以存储2kw左右的数据也就是说查询一次数据,如果这些数据页都在磁盘里,那么最多需要查询三次磁盘IO。
跳表不适合磁盘IO
跳表是链表结构,一条数据一个结点,那么一个node节点一次磁盘io, 一个page 页规模的IO存储的性能 估计要下降1000倍以上。
原生跳表 一个node存放一个 索引信息 ,所以树的层数比较高
如果最底层要存放2kw数据,且每次查询都要能达到二分查找的效果,2kw大概在2的24次方 左右,所以,2kw数据的跳表大概高度在24层左右。 如果要进行查找,大概要进行 24次磁盘IO。
这里讲的是原生跳表,即便使用随机函数,他只是优化了写入性能,不会影响层高。所以,虽然在理论上,跳表的时间复杂度和B+树相同 ,但是:
B+树更适合 磁盘IO, 更合适MYSQL。
从反面来说, 跳表更适合内存IO, 更适合redis。