跳表和B+树的相似和区别 ***
原文:B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】-阿里云开发者社区
一、相似:
B+树和跳表的最下面一层,都包含了所有的数据,且都是顺序的,适合用于范围查询
二、区别:
1. 存储结构差别
B+树:由多个 大小为16k
的数据页组成,一个数据页可以存放多个索引信息。 3层数据源就可以存储2kw
左右的数据, 也就是2kw数据
查询一次最多只需要查询三次磁盘IO
跳表:由多个结点用链表结构的方式组成,一条数据一个结点。2kw数据 大概是2的24次方
,所以跳表大概高度在24层
左右,这24层数据会分散在不同的数据页,查一次数据可能呢会24次磁盘IO。
2. 增减数据的操作不一样
B+树:本质上是多叉平衡二叉树,子树们的高度层级最多差一个层级。为了维持B+树的平衡,增加数据时,会不断分裂调整数据页,有可能修改、增加、删除数据页。
跳表:纯粹往链表结构中增删结点,和数据页无关。
3. 简单归纳:
B+树:查询速度更快
跳表:修改速度更快
三、mysql的索引为什么使用 B+树 而不使用 跳表?
1. mysql 更需要的是查询速度,所以 B+树 更适合。
2. 如果需要频繁修改,需要修改的速度更快的话,也可以把mysql存储引擎改成跳表。比如facebook 的 rocksDB
四、redis为什么使用跳表而不使用B+树或二叉树呢?
redis 多种数据结构里面的 有序集合,内部实现就是跳表。
因为 redis 是纯内存数据库,进行读写数据都是操作内存,跟磁盘没关系。所以不存在磁盘IO次数问题,就不再是跳表的劣势。