slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
停止在数据库中使用 UUID
17611538698
webmaster@21cto.com

停止在数据库中使用 UUID

数据库 0 909 2024-06-03 11:07:32

图片

导读:UUID 如何破坏数据库性能,请大家来看本文。

唯一标识数据库中的行的最常见方法是使用UUID 字段。

然而我们也必须注意,这种方法实际上存在着性能问题。在本文中,我们讨论了在数据库表中使用 UUID 作为键时会出现的两个性能问题。

事不宜迟...让我们开始!

什么是 UUID?


UUID 代表通用唯一标识符(Universally Unique Identifier,缩写:UUID)。

UUID 目前有很多个版本,但在本文中我们只考虑最流行的版本:UUIDv4。

以下,是 UUIDv4 的示例:

图片

请注意:每个 UUID 都在相同位置上,用数字4来表示版本号。

问题 1 — 插入的性能


当将新记录插入表中时,必须更新与主键相关联的索引以保持最佳查询性能。

索引是使用 B+ 树数据结构构建的。

对于每个记录插入,必须重新平衡底层 B+ 树以优化查询性能。

对于 UUID 来说,重新平衡过程变得非常低效。

这是因为 UUID 固有的随机性,使得保持树的平衡变得更加困难。

随着规模的扩大,您将需要重新平衡数百万个节点,这会大大降低使用 UUID 键时的插入性能。

问题 2 — 更高的存储量


让我们考虑具有自动递增整数键的 UUID 的大小:

相比之下,自动递增整数每个值消耗 32 位,而 UUID 每个值消耗128 位。

每行多 4 倍。

此外,大多数人以人类可读的形式存储 UUID,这意味着每个 UUID 值最多可消耗688 位。

每行大约多 20 倍。

让我们通过模拟真实的数据库来评估 UUID 实际上如何影响您的存储。

我们将在此示例中调整Josh Tried Coding使用的表格:

  • 表 1将包含 100 万行带有 UUID 的数据。

  • 表 2将包含 100 万行带有自动递增整数的数据。


以下是结果,让我们逐一分析一下每个统计数据:

图片

总表大小:考虑两个表大小时,UUID 表大约比整数表大2.3 倍!

ID 字段大小:单个 UUID 字段比等效整数字段需要9.3 倍的存储空间!

ID 列大小:当排除每个表中的其他属性时, UUID 和整数列之间的大小差异为3.5 倍!

结论


UUID 是确保表中记录之间唯一性的好方法。


这些问题在规模上很普遍,因此 UUID 在实际场景不会对大多数项目造成明显的性能下降。


尽管这些问题在规模上很普遍,但认识到在表中使用 UUID 的含义,并确保最佳的数据库设计非常重要。

作者:校长

评论