微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL发号问题的分析和改进

关于发号器的使用,其实有一个大背景,那就是关于主键的一些设计问题,在MysqL中如果一张表没有主键,实际的数据处理就有点麻烦了。
因为在InnoDB存储引擎中,表都是按照主键的顺序进行存放的,我们叫做聚簇索引表或者索引组织表(IOT)

  1. 显式的创建主键Primary key。
  2. 判断表中是否有非空唯一索引,如果有,则为主键。
  3. 如果都不符合上述条件,则会生成UUID的一个隐式主键(6字节大)

可以使用类似的sql来看到这个隐藏列:

select _rowid from test

这和主键有什么关系?主要是因为有些时候我们创建主键就是为了创建而创建,没有实际的业务含义,所以会形成一种使用习惯,那就是启用自增列。
自增列的问题很多,有些几句话还说不清楚,大体有如下的一些问题:

  1. 自增列没有业务含义
  2. 过度依赖自增列
  3. 自增列和状态值主键并存,反而影响业务逻辑和性能
  4. MysqL历史遗留bug,在MysqL 8.0该问题才修复

到了这里,我们的需求也基本明确了,我们所说的发号器其实就是要确保每次取到的ID号都是唯一的,当然也显而易见是趋势递增的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐