数据库

 首页 > 数据库 > MySql > Mysql InnoDB为什么要添加跟业务无关的自增主键

Mysql InnoDB为什么要添加跟业务无关的自增主键

分享到:
【字体:
导读:
         摘要:在InnoDB的实现中,为每个索引页面维护了一个上次插入的位置,以及上次的插入是递增/递减的标识。根据这些信息,InnoDB能够判断出新插入到页面中的记录,是否仍旧满足递增/递减的约束,若满足约束,则采用优化后的分裂策略...

Mysql InnoDB为什么要添加跟业务无关的自增主键
在Mysql表设计中,通常会使用一个与业务无关的自增列做为主键。
这是因为Mysql默认使用B-Tree索引,你可以简单理解为“排好序的快速查找结构”。
如下是一个B-Tree的结构图,2层B+树,每个页面的扇出为4;并有1到6五条记录;上层记录保存每个页面的最小值;每个页面通过双向链表链接起来的;
mysql1.png当你插入记录7时,就会发生页面分裂:
msyql2.png
如上可见分裂产生了记录移动,但是优化后的分裂操作无需记录移动:
mysql3.png

在InnoDB的实现中,为每个索引页面维护了一个上次插入的位置,以及上次的插入是递增/递减的标识。根据这些信息,InnoDB能够判断出新插入到页面中的记录,是否仍旧满足递增/递减的约束,若满足约束,则采用优化后的分裂策略;
所以建议使用一列顺序递增的 ID 来作为主键,但不必是数据库的autoincrement字段,只要满足顺序增加即可 。很多大型应用会有顺序递增的ID生成器。 Mysql InnoDB为什么要添加跟业务无关的自增主键
分享到:
MySQL优化---DBA对MySQL优化的一些总结
MySQL优化---DBA对MySQL优化的一些总结 1. 要确保有足够的内存 数据库能够高效的运行,最关建的因素需要内存足更大了,能缓存住数据,更新也可以在内存先完成。但不同的业务对内存需要强度不一样,一推荐内存要占到数据的15-25%的比例,特别的热的数据,内存基本要达到数据库的80%大小。 2. 需要更多更快的CPU  MySQL...
Mysql存储时间字段用int、timestamp还是d...
Mysql存储时间字段用int、timestamp还是datetime? 通常存储时间用datetime类型,现在很多系统也用int存储时间,它们有什么区别?本人总结如下: int (1).4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int索引存储空间也相对较小,排序和查询效率相对较高一点点 (2)可读性极差,无法直观的...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……