使用 UUID-PostgreSql 数据类型是否能解决性能问题?[已结束]

Does using the UUID-PostgreSql data type solve performance issues? [closed]

提问人:wuarmin 提问时间:11/3/2023 更新时间:11/3/2023 访问量:51

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来用事实和引文来回答。

20天前关闭。

我读过很多关于“uuid 作为主键”的不同意见,我有点困惑。

特别是,这篇文章让我不确定什么是最好的方法:https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439

我的用例:

我有一个文档表,它与文档记录具有 1 到 n 的关联。我想使用 UUID 作为文档表中的主键。我将使用 PostgreSql 数据类型 uuid https://www.postgresql.org/docs/current/datatype-uuid.html

这种数据类型是否解决了这篇文章的性能问题? 对于此用例,是否建议使用 uuid? 这样做的重点只是无法猜测 ID。

PostgreSQL 主键 UUID

评论

2赞 Frank Heikens 11/3/2023
无法回答,因为我们对您的查询的当前性能一无所知。如果您当前的查询使用整数需要 5 毫秒,而使用 uuid 的新查询速度慢了 10 倍,这会有问题吗?50毫秒。根据我的经验,最大的性能问题与数据类型无关,而是与查询本身有关。尤其是编写查询和/或数据模型及其索引的人的技能
1赞 Marmite Bomber 11/3/2023
在使用 PostgreSQL 时,您至少要避免使用 UUID 的文本形式(以 16 字节的十六进制形式存储)。其余的取决于您的性能测试。例如,哈希联接哈希表会更大,因为键比使用 .询问您在使用时是否有一些优势。请参阅针对 Oracle 的类似讨论uuiduuidintuuidint
0赞 wuarmin 11/3/2023
目前的表现不错。该项目才刚刚开始。我不想在未来遇到任何会给我带来困难的不利因素。最好在早期阶段进行更正。
0赞 wuarmin 11/3/2023
但我认为,如果可猜测性是使用 uuid 的唯一原因,您应该坚持使用整数并相应地设计授权,这样可猜测性就无关紧要了。你觉得怎么样?

答:

1赞 Laurenz Albe 11/3/2023 #1

在您链接到的文章中,我没有看到任何反对 UUID 的严肃论点。就性能而言:

  • 生成 UUID 比计算序列慢

  • an 比 an 占用更多的存储空间uuidbigint

  • 最重要的是,UUID 上的主键索引在 s 期间永远不会表现得那么好,需要更多的 I/O,并且不会那么密集INSERT

但是,所有这些性能劣势可能与处理的其余部分相比相形见绌:网络延迟、客户端应用程序处理等。所以不要太担心。

我的经验法则是:如果你需要 UUID,因为你在分布式系统中或数据库外部生成主键,那就去做吧。如果没有令人信服的理由使用 UUID,请使用标识列。