在MyISAM中的索引 叶子节点就是存储的数据的真实地址,那么为什么InnoDB中为什么不也存储真实地址,如果存储真实地址,也不需要进行再重新再重头查找一遍。那么为什么存储的是主键值呢? 其实这个问题我觉得值得来说一下,因为我也有疑问。
我们首先来说下MyISAM的索引文件和数据文件,在MyISAM中他的索引文件和数据文件是分开存储的,他的数据文件存储数据时,并没有顺序。他的顺序是按照添加顺序进行存储的。 那么就不需要担心这些数据会进行重排,地址发生变化这些。所以MyISAM的索引是直接存储的是地址值,因为不会改变。
通过以上的说明,也能猜到为什么InnoDB中不用数据的地址值了。首先说结论,因为地址值可能会因为我们的操作而进行重排,比如在第一页的数据,被我们修改了主键值,被重排到了另外的页中,所以会导致地址改变。 再一个由于每一天数据大小是不固定的,当一个页剩下的空间不足以写下下一条数据时,就会正常再分一个页空间。但如果我们在之前页中删了几条数据,此时又有数据能刚好写进去,因为数据大小不固定,那么此时地址就会有偏差
这也是为什么不用地址值的原因了。