日常建表中,在主键没有特殊需要的情况,DBA一般都会提醒使用自增主键,这样做用什么好处?要想解答这个问题,我们要对mysql 数据存储的方式有一定的了解,
数据库中存储的基本单位叫做页(下面以mysql innodb引擎为例)
页基本结构.png
其中User Records 是已经存储的数据(UR),Free Space 是空闲空间(FR),Infimum + Supremum是最小记录和最大记录(一遍是主键id),
当不断插入数据时,UR 不变变大,FR逐渐变小,最大最小记录也随之更新,当FR空间不能再插入新的数据时,此时就发生页分裂,产生新的页挂载当前页后面,逐渐演变成下面的结构
页链表结构.png
如果不用自增主键,那么产生页分裂将难以维护,因为随时有可能从中间插入,这也就意味着整个页链表的更新,性能相比自增主键的话其实性能差距就很大。