我正在考虑将 UUID 作为 PK 用于我的新 PostgreSQL 数据库中的所有表,为此我将使用uuid_generate_v5
and uuid_ns_dns
oruuid_ns_url
函数,但我有一些疑问:
- 仅在数据库中使用 UUID 是否有任何问题(即性能)?
- 使用方面有什么优缺点
uuid_generate_v4
吗? - 什么时候使用
uuid_ns_dns
或uuid_ns_url
?(我没有找到有关它的信息) - 函数
name
的参数uuid_generate_v5
可以是任何字符串(甚至是空字符串)还是取决于namespace
参数?请举例。
回答您的问题:
没有问题,但性能会比使用序列生成的
bigint
主键差一些,因为整数加一必须比任何更复杂的方法性能更好。此外,auuid
占用两倍的存储空间(16 字节)。如果这对您有明显的影响,您应该进行基准测试。
除了性能影响之外,它没有任何区别。
没关系,它们只是返回不同的常量。
name
参数可以是任何字符串。该函数是IMMUTABLE
,因此如果您需要不同的 UUID,则必须确保使用不同的名称。如果您需要以分散的方式生成人工主键,请使用 UUID,例如在应用程序代码中或在使用分片的不同数据库中。如果在单个数据库中生成主键,请使用序列。