跳表和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次数问题,就不再是跳表的劣势。