Bas*_*que 13 postgresql index primary-key uuid
Microsoft SQL Server 提供了NEWID
生成新 GUID(UUID的 Microsoft 版本)值的命令,该值可用作主键值(在其uniqueidentifier
数据类型中)。这些本质上不是顺序的,因此更新索引可能效率低下。
或者,MS SQL Server 提供该NEWSEQUENTIALID
命令。引用他们的文档:
创建一个 GUID,该 GUID 大于自 Windows 启动以来此函数在指定计算机上先前生成的任何 GUID。重新启动 Windows 后,GUID 可以从较低的范围再次启动,但仍然是全局唯一的。当 GUID 列用作行标识符时,使用 NEWSEQUENTIALID 比使用 NEWID 函数更快。这是因为 NEWID 函数会导致随机活动并使用较少的缓存数据页。使用 NEWSEQUENTIALID 还有助于完全填充数据和索引页。
有没有办法在 Postgres 中获得更有效索引的 UUID?
uuid-ossp
模块PostgreSQL 使用ITU-T Rec.提供的标准化 UUID 生成算法。X.667、ISO/IEC 9834-8:2005和RFC 4122。从文档中uuid-ossp
,
uuid-ossp 模块提供了使用几种标准算法之一生成通用唯一标识符 (UUID) 的功能。还有一些函数可以生成某些特殊的 UUID 常量。
uuid_generate_v1()
此函数生成版本 1 UUID。这涉及计算机的 MAC 地址和时间戳。请注意,此类 UUID 会显示创建标识符的计算机的身份及其创建时间,这可能使其不适用于某些对安全敏感的应用程序。
只要MAC地址不改变,你就是金子。
说了这么多,我同意@a_horse_with_no_name,
根据我的理解,这仅在 SQL Server 中是必需的,因为表存储在聚集索引中,这使得随机插入比堆表慢。Postgres 没有这样的概念,所以我认为这不会对 Postgres 产生影响
事实上,考虑到更少的碰撞和更高的安全性,我会接受它。对此我会用uuid_generate_v4()
uuid_generate_v4()
此函数生成版本 4 UUID,它完全来自随机数。