前言
领导:既然自增数字主键会导致主备同步时主键冲突,自增主键能不能砍掉?
答:自增主键主要是技术上提升效率,键冲突可以考虑备库插入时不指定主键值,或者binlog改成row模式,而且,
公司规范:如果表记录超过1万行,建议用自增数字当主键,类型用BIGINT UNSIGNED。
InnoDB结构B+树
要了解InnoDB必须先了解B+树
主键B+树
B+树特点
- 有序
- 多叉树
- 叶子节点之间有引用,是一个链表
- 可以有效处理范围数据,如下图查询1-7行
定义Max. Degree = 4:节点达到4条记录就分裂,就是每个节点最多3条记录
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEOk4y8J-1602926924593)(/Users/Bingxiong/Desktop/i/技术博客/为什么自增主键/为什么自增主键.assets/B+tree_PK2.png)]](https://i-blog.csdnimg.cn/blog_migrate/6b2617a5b0ddb2295efb2e539f146d8b.png#pic_center)
图1
上图主键依次递增,现在在中间插入主键8

图2
页分裂:插入节点8,原节点超过3条记录,触发页分裂,同时父节点插入新增节点起始元素。当父节点超过3个元素,同样会触发分裂。
页合并:页分裂的逆过程,删除元素时

本文探讨了InnoDB使用自增主键的原因,包括减少页分裂以提高性能和空间利用率,以及利用数字类型减小索引树节点大小,降低查询IO。在数据量大和插入频繁的情况下,自增主键能有效提升数据库效率。然而,对于数据量小或Key-Value场景,可能不需要自增主键。
最低0.47元/天 解锁文章
774

被折叠的 条评论
为什么被折叠?



