UUID 与主键的自动递增数

Posted

技术标签:

【中文标题】UUID 与主键的自动递增数【英文标题】:UUID versus auto increment number for primary key 【发布时间】:2011-07-06 18:36:54 【问题描述】:

为什么我应该为我的实体的主键选择 UUID 而不是自动递增编号?有什么好处和坏处?

【问题讨论】:

【参考方案1】:

Andrey 和 Mjg 都有优点,但我要添加一个相关的性能问题,这一点很重要。

随着数据库和密钥生成的解耦,还允许在对象之间具有复杂关系的应用程序使用适当的密钥创建它们,从而可以进行批量插入。

在自增的情况下,所有拥有关系的对象(即具有外键的表)都必须等待关系的另一端(即外键来自的表)保存、查询分配的 ids,然后单独更新记录以前的记录。

【讨论】:

另一方面,我们正在考虑在应用程序中使用 UUID 版本 2 来进行问责 - 它包含了确切的时间(以微秒为单位)和创建它的机器的 MAC 地址。【参考方案2】:

UUID 是全局唯一的,可以并行生成,无需集群数据库服务器之间的通信。所以"Object IDs are more synergistic with sharding and distribution."。 UUID 通常以 128 位存储。

自动递增的整数对用户更友好(嗯,更短,更容易记住),并且自动允许按插入顺序排序。整数通常以 32 或 64 位存储。

【讨论】:

【参考方案3】:

您可以独立生成它们的主要专业人士。缺点是它更大。

【讨论】:

以上是关于UUID 与主键的自动递增数的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据插入具有自动递增主键的 MySQL?

SQL java获取分配给自动递增主键的值[重复]

Django:关于自动递增主键的最佳实践

谁负责 MySQL 和 Hibernate 之间主键的自动递增?

数据库主键为什么要用递增的序列?UUID为什么不适合做主键?

弹簧数据 JPA; save() 自动递增主键错误