使用自动增量id或sha1哈希的主键mysql?

时间:2012-05-26 05:33:10

标签: mysql primary-key

我可以将自动增量ID字段作为我的主键或sha1哈希。

我应该选择哪一个?

哪种表现会更好?

3 个答案:

答案 0 :(得分:20)

有一些应用程序驱动的案例,您希望使用全局唯一ID(UUID / GUID):

  1. 您希望(或正在)使用分片策略来扩展写入。您不希望分片节点重复密钥
  2. 您希望能够安全地 端口数据从一个节点到另一个节点保留密钥。如果您想要保持外键关系,这一点至关重要。
  3. 您的应用程序还用于离线家庭内部销售家庭维修等),其中离线应用程序会定期同步与“真理的来源”。您希望这些离线密钥是唯一的,而无需进行远程呼叫。否则,您需要提出一种策略来重新组织密钥和关系。使用自动增量策略并根据您使用的RDBMS,这可能是一项非常重要的任务。
  4. 如果您没有上面的用例或类似内容,可能会使用自动增量ID,如果这样可以让您感到舒服;但是,您仍然想要考虑UUID / GUID

    权衡:

    关于UUID / GUID键的速度/大小,有很多意见。在一天结束时,这是一个权衡,有很多方法可以通过数据库获得或失去速度。理想情况下,您希望将索引存储在RAM中以便尽可能快地存储;然而,这是一种权衡,你必须权衡其他因素。

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

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

答案 1 :(得分:1)

使用自动增量ID。

  • 不必仅增加ID。
  • 哈希适合存储密码。
  • 您可以使用SHA哈希获得重复的密钥。机会很小但很真实。
  • ID更具可读性
  • ID是一种插入历史记录。您知道最后插入了哪条记录(最高ID)

答案 2 :(得分:1)

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