基于InnoDB索引主键策略

本文探讨了数据库设计中主键的选择策略,特别是自增int型与字符串类型的区别。重点分析了字符串作为主键可能导致的问题,如随机写入、页分裂等,并讨论了顺序主键可能引发的并发问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、主键类型策略
建议采用自增长int型为主键,主键的数据应该与应用无关,不建议采用字符串作为主键。因为采用数字作为主键可以保证数据行是按照顺序写入,但是采用字符串为主键可能导致随机写入,进而导致数据的频繁移动,甚至导致页分裂影响性能。InnoDB页分裂的最大填充因为为15/16。
2、使用字符串作为主键的缺点:
2.1、由于字符串作为主键是随机写入,所以可能写入的目标页已经刷新到了磁盘中并从缓存中删除了,或者还没有加载到内存中。此时在插入之前不得不先找到对应数据,加载到内存中,在进行插入操作
2.2、因为写入数据为乱序的,所以mysql不得不频繁进行分页操作,以便为新的行分配空间。页分裂会导致大量的数据移动
2.3、由于频繁页分裂,页会变得稀疏并不规则的被填充,最终导致数据会有碎片
3、顺序主键缺点:
3.1、并发插入导致间隙锁竞争加剧
3.2、自增长的情况下,也会导致获取AUTO_INCREMENT获取加剧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值