为什么InnoDB宜用自增主键

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

前言

领导:既然自增数字主键会导致主备同步时主键冲突,自增主键能不能砍掉?

答:自增主键主要是技术上提升效率,键冲突可以考虑备库插入时不指定主键值,或者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)]
图1

上图主键依次递增,现在在中间插入主键8
图2
图2

页分裂:插入节点8,原节点超过3条记录,触发页分裂,同时父节点插入新增节点起始元素。当父节点超过3个元素,同样会触发分裂。

页合并:页分裂的逆过程,删除元素时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值