为什么MySQL不使用跳跃表作为索引?

1 个回答

  • 夜太
    明知不可为而为之就是我最大的诚意
    首先MySQL的业务场景对应的数据量都是几千万数量级的,数据是不可能全部加载到内存中的,只能是部分数据加载到内存中。而Redis是个基于内存的数据库,数据是可以全部加入到内存中的。 磁盘IO的开销 对机械磁盘进行一次IO读取操作开销是非常大的,磁盘读取的速度大致是内存读取速度的几百分之一。所以操作系统做了一些优化,进行一次磁盘IO操作时,会进行一些预读,不仅是将当前磁盘地址的数据读取到内存中,而是把相邻数据也读取到内存缓存区。(因为局部性预读原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,innodb中一页是16K。) 而一般innodb的B+树一般是2到4层,也就是最多进行2到4次磁盘IO,就可以查找到对应值所在的叶子节点,然后进行操作。而如果是跳跃表,查找一个Score对应的位置是需要进行Log(N)次的操作,如果跳跃表的索引节点都存在磁盘中,那么也就需要Log(N)次的磁盘IO。
    发布于 2022-02-11 10:46 •IP属地 西藏
    举报
    评论
    收藏