6

我可以有一个自动增量 id 字段作为我的主键或一个 sha1 哈希。

我应该选择哪一个?

在性能方面哪个会更好?

4

3 回答 3

22

在一些应用程序驱动的情况下,您希望使用全局唯一 ID (UUID/GUID):

  1. 您期望(或正在)使用分片策略来扩展写入。您不希望分片节点重复键
  2. 您希望能够安全地将 数据从一个节点移植到另一个保留密钥的节点。如果您想保持外键关系完好无损,这一点至关重要。
  3. 您的应用程序还可以离线使用(家庭销售家庭维修等),其中离线应用程序会定期与“事实来源”同步。您希望这些离线密钥是唯一的,而无需进行远程调用。否则,由您决定在进入的过程中重新组织键和关系的策略。使用自动增量策略并根据您使用的 RDBMS,这可能是一项非常重要的任务。

如果你没有上面的用例或类似的东西,你可以使用自动递增的 id,如果这让你舒服的话;但是,您可能需要考虑 UUID/GUID

权衡:

关于 UUID/GUID 键的速度/大小有很多意见。归根结底,这是一种权衡,有很多方法可以提高或降低数据库的速度。理想情况下,您希望将索引存储在 RAM 中以便尽可能快;但是,这是一个权衡,您必须权衡其他考虑因素。

关于 UUID/GUID 的其他注意事项:

  1. 许多 RDBMS 可以生成 UUID。
  2. 您还可以通过您的应用程序生成 UUID (您不依赖于 RDBMS 来生成)。
  3. 开发人员/测试人员可以轻松地将数据从环境移植到环境,并使应用程序按预期工作。这是一个经常被忽视的用例;但是,它是使用 UUID/GUID 策略的更强有力的案例之一。
  4. 有些数据库针对离线使用(CouchDB)进行了优化,其中UUID就是您所获得的。
于 2012-05-26T05:53:39.537 回答
1

使用自动增量 ID。

  • ID 不必只生成递增。
  • 哈希更适合存储密码。
  • 您可以使用 SHA 哈希获得重复的密钥。机会很小,但真实存在。
  • ID 更具可读性
  • ID 是一种插入历史。你知道最后插入的是哪条记录(最高 ID)
于 2012-05-26T05:35:24.953 回答
1

几乎肯定是一个自动递增的整数。创建速度更快,搜索速度更快,体积更小。例如,考虑如果您有另一个表引用它。您希望它通过完整的主键还是通过 sha1 哈希来引用它?一个整数会更有意义(在某种程度上),它会更(很多!)更有效率。

于 2012-05-26T05:35:37.187 回答