引出
想象一下,你正在一家巨大的图书馆工作,这里藏书百万册,读者络绎不绝,每个人都想尽快找到他们想要的书籍。图书馆的布局有两种设计方案摆在你面前:
方案A:使用传统的目录卡片系统,就像老式的图书馆一样,每本书的信息都写在一张卡片上,按照字母顺序排列在一个巨大的抽屉柜里。这听起来就像是线性的数据存储,查找一本书的性能是O(n)——如果我们要找的是最后一本书,可能要翻阅整个抽屉!
方案B:使用现代的计算机系统,它采用B+树结构来索引所有的书籍。这意味着无论你要找哪一本书,计算机都能迅速定位,就像有了GPS导航一样,查找性能提升到了O(log N)。
那么,如果有人建议我们用跳表来代替B+树呢?跳表就像是在图书馆的每排书架上方都挂了一个指示牌,每个指示牌又指向下一个指示牌,这样找书时就可以跳跃式前进,减少行走的距离,性能同样是O(log N),并且实现也很简单,那为什么Mysql的索引不使用跳表呢?用跳表做索引的Mysql又有什么不一样呢?
MySQL的B+树索引:
MySQL主要面向磁盘存储,其中的InnoDB存储引擎使用B+树作为索引结构。B+树具有以下特点:
- 所有的叶子节点都存储实际的数据,非叶子节点只存储索引信息。
- 高