前言
在设计数据库表的时候,MySQL官方推荐不要使用uuid或者不重复不连续的雪花id(long型且id唯一,单机递增),而是腿甲使用自增id,推荐使用auto_increment。
自增id做主键
在设计数据库表时,自增id 通过auto_increment,id依次递增,一般来说插入的id为上一个id值加1。
- 使用自增id,如果我们定义了主键(PRIMARY KEY),那么
InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含NULL值的唯一索引作为主键索引、如果也没有这样的值作为主键索引,则InnoDB会选择设置内置6字节长的ROWID作为隐含的聚集索引(ROWID随着航记录的写入设置逐渐递增) - 记录本身存放在主索引(一颗B+tree)的叶子节点上。这就需要同一个叶子节点内(大小为一个内存页或者磁盘页)的各个记录按照主键顺序存放,每当一天记录插入时,MySQL会根据其主键将其插入当前适当的节点位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟为一个新的页
- 使用主键自增,每次插入一条新的记录,记录就会沿着当前索引节点的后续位置,当一页写满,就会开辟一个新的页
- 减少了叶分裂和碎片的产生
- 自增id主键可能不连续,造成不连续的情况可能有:
- 唯一主键冲突
- 事务回滚
- insert…select语句批量申请自增id
UUID做主键
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯

本文探讨了在MySQL数据库设计中自增ID与UUID作为主键的区别。自增ID能够提高存储效率,减少页分裂和碎片产生,适合用作主键;UUID能确保全局唯一性,适用于逻辑主键,但可能导致大量IO压力。
最低0.47元/天 解锁文章
1344

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



