小编典典

GUID/UUID 数据库键的优缺点

all

我过去曾在许多数据库系统上工作过,如果所有数据库键都是GUID /
UUID
值,那么在数据库之间移动条目会容易得多。我曾考虑过几次走这条路,但总是有一些不确定性,尤其是在性能和​​无法通过电话读取的
URL 方面。

有没有人在数据库中广泛使用 GUID?这样做我会得到什么好处,可能的陷阱是什么?


阅读 99

收藏
2022-05-18

共1个答案

小编典典

好处:

  • 可以离线生成它们。
  • 使复制变得微不足道(与 int 不同,这使得复制变得非常困难)
  • ORM 通常和他们一样
  • 跨应用程序独一无二。所以我们可以在我们的应用程序(也是 guid)中使用我们的 CMS(guid)中的 PK,并且知道我们永远不会发生冲突。

缺点:

  • 更大的空间使用,但空间很便宜(呃)
  • 无法通过 ID 订购以获取插入订单。
  • 在 URL 中看起来很难看,但实际上,WTF 您是否正在将 REAL DB 密钥放入 URL 中!?(这点在下面的评论中有争议)
  • 更难进行手动调试,但没那么难。

就个人而言,我将它们用于任何规模相当大的系统中的大多数 PK,但我在一个在整个地方都复制的系统上接受了“培训”,所以我们必须拥有它们。YMMV。

我认为重复数据的事情是垃圾 - 你可以得到重复的数据,但是你这样做。代理键通常在我工作过的地方不受欢迎。我们确实使用类似 WordPress 的系统:

  • 行的唯一 ID(GUID/其他)。用户永远不可见。
  • 公共 ID 从某个字段生成一次(例如标题 - 使其成为文章的标题)

更新: 所以这个得到了很多 +1,我想我应该指出 GUID PK 的一个很大的缺点:聚集索引。

如果您有很多记录,并且 GUID 上有一个聚集索引,那么您的插入性能将会很糟糕,因为您在项目列表中的随机位置插入(这就是重点),而不是最后(这很快)

因此,如果您需要插入性能,可以使用 auto-inc INT,如果您想与其他人共享它,则生成一个 GUID(即,在 URL 中将其显示给用户)

2022-05-18