-1

自动增量和 UUID 样式之间的真正区别是什么?

我认为 auto inc 与 uuid 相比很容易破解

在有很多记录的查询中,Uuid 比自动增量慢,但它有很大的不同吗?

4

4 回答 4

4

从关系模型的角度来看,主键非常重要

  • 必须快速检查唯一性
  • 在其他表中用作外键
  • 用于加入

PK越小越好。这就是为什么数字PK是最好的。

如果您担心它很容易“破解”,您可以添加一个额外的 UUID 作为自然键

  • 仅用于“直接访问”行

这就是我在几个项目中看到的,它就像一个魅力。

于 2010-03-04T10:12:54.060 回答
2

增量 ID 本身并不“容易破解”,它只是提供在您使用大随机 ID 时被隐藏(但并非完全隐藏)的入口点。仍然需要糟糕的实施和可利用的软件才能存在真正的危险。正如您在地址栏中的 URL 中看到的那样,该站​​点使用增量 ID 没有问题。

但是,除了安全考虑之外,当您不希望用户轻易猜测其他(尽管是公开的)内容的 URL 时,随机唯一 ID 有时会很有帮助。例如,在一个房地产网站上,您可能不想提供在 ID 中“上下”查看竞争对手的条目的可能性,即使他们可以通过搜索找到它们。有点阻碍可能是一件好事。

为什么不两者都用?用于加快索引和关系的数字自动增量键;用于外部访问的随机 UID。

于 2010-03-04T09:54:28.400 回答
1

一些想法:

  • auto-inc:DB 保证 uniq ID,但您必须检索它或失去与您刚刚插入的数据记录的“联系”。
  • UUID:必须在“外部”创建(不在数据库服务器中,可能在应用服务器中)。ID 是已知的并且存在到插入记录的链接,但是(非常小,取决于 uuid 的 uuid-ness)插入时的冲突风险。
于 2010-03-04T09:55:10.600 回答
0

注意 PK 列的长度... UUID 和 GUID 非常长... 字符串。一个 INT 甚至 BIGINT 自增列可以在更小的空间内确保唯一性。

请注意,autoincement 列在表管理方面有一些自己的问题。如果您截断/删除创建表,那么自动增量将难以维护。此外,在 MySQL 中,单个表只允许使用 1 个自增列。

如果您的数据允许,请使用从数据中派生的某种 HASH 用于索引和性能。

于 2010-04-06T20:22:31.333 回答