Mysql表主键自增ID还是UUID?

1,490 阅读2分钟

本文主要列出的Mysql表主键自增ID、UUID的各自优缺点,如果写的不好请见谅!!

1、自增ID

1.1 使用自增ID的好处
  • 字段长度较uuid会小很多。
  • 数据库自动编号,按顺序存放,利于检索
  • 无需担心主键重复问题
使用自增ID的缺点
  • 因为是自增,在某些业务场景下,容易被其他人查到业务量。
  • 发生数据迁移时,或者表合并时会非常麻烦
  • 在高并发的场景下,竞争自增锁会降低数据库的吞吐能力

2、UUID

UUID:通用唯一标识码,UUID是基于当前时间、计数器和硬件标识等数据计算生成的。

2.1 使用UUID的优点
  • 唯一标识,不会考虑重复问题,在数据拆分、合并时也能达到全局的唯一性。
  • 可以在应用层生成,提高数据库的吞吐能力。
  • 无需担心业务量泄露的问题。
2.2 使用UUID的缺点
  • 因为UUID是随机生成的,所以会发生随机IO,影响插入速度,并且会造成硬盘的使用率较低。

  • UUID占用空间较大,建立的索引越多,造成的影响越大。

  • UUID之间比较大小较自增ID慢不少,影响查询速度。

3、总结

最后说下结论,一般情况MySQL推荐使用自增ID。因为在MySQL的InnoDB存储引擎中,主键索引是一种聚簇索引,主键索引的B+树的叶子节点按照顺序存储了主键值及数据,如果主键索引是自增ID,只需要按顺序往后排列即可,如果是UUID,ID是随机生成的,在数据插入时会造成大量的数据移动,产生大量的内存碎片,造成插入性能的下降。