Mysql的索引为什么使用B树而不使用

北京中科白颠疯 http://m.39.net/pf/bdfyy/bdfzj/

来源丨经授权转自小白debug(ID:xiaobaidebug)

作者丨小白

在我们的印象中,mysql数据表里无非就是存储一行行的数据。跟个excel似的。

直接遍历这一行行数据,性能就是O(n),比较慢。为了加速查询,使用了B+树来做索引,将查询性能优化到了O(lg(n))。

但问题就来了,查询数据性能在lg(n)级别的数据结构有很多,比如redis的zset里用到的跳表,也是lg(n),并且实现还贼简单。

那为什么mysql的索引,不使用跳表呢?

我们今天就来聊聊这个话题。

B+树的结构

之前的一篇文章里,已经提到过B+树的结构了。文章不长,如果没看过,建议先看下。

当然,不看也行。

在这里,为了混点字数,我简单总结下B+树的结构。

B+树查询过程

如上图,一般B+树是由多个页组成的多层级结构,每个页16Kb,对于主键索引来说,最末级的叶子结点放行数据,非叶子结点放的则是索引信息(主键id和页号),用于加速查询。

比方说我们想要查找行数据5。会先从顶层页的record们入手。record里包含了主键id和页号(页地址)。


转载请注明:http://www.aierlanlan.com/rzgz/331.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了