为什么MySQL推荐使用自增主键?

为什么MySQL推荐使用自增主键?

主键数据记录本身被存于主索引(一棵B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点),如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页;

而如果使用非自增主键,由于每次插入主键的值近似于随机,因此每次新记录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面

参考文献

相关推荐
郝学胜-神的一滴17 小时前
干货版《算法导论》07:递归视角下的选择排序与归并排序
java·数据结构·c++·python·程序人生·算法·排序算法
郝学胜-神的一滴1 天前
Qt 高级开发 019:从零定制登录窗口按钮、Logo 样式与交互悬浮效果
开发语言·c++·qt·程序人生·交互·用户界面
旺仔老馒头.1 天前
【C++】类和对象(三)
开发语言·c++·程序人生·类和对象
郝学胜-神的一滴2 天前
Qt 高级开发 018:复刻经典登录界面布局与窗口美化全解析
开发语言·c++·qt·程序人生·用户界面
空中湖2 天前
SCL-90的微服务健康检查——90个探针覆盖10个心理维度
程序人生
南浦别a2 天前
第一百一十三天--慢慢改变吧
学习·程序人生
humors2212 天前
Windows运维与安全场景合集(不定期更新)
大数据·运维·服务器·程序人生·网络安全
空中湖3 天前
MBTI类型系统——一个“假类型安全“的人格编程语言
程序人生
humors2213 天前
构建个人化的阅读方式:基于多维度的选择分析
大数据·程序人生
郝学胜-神的一滴3 天前
Qt 高级开发 017:中文乱码
开发语言·c++·qt·程序人生·用户界面