本文主要列出的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是随机生成的,在数据插入时会造成大量的数据移动,产生大量的内存碎片,造成插入性能的下降。