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

cgw*_*cts 4 mysql primary-key

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

我应该选择哪一个?

在性能方面哪个更好?

Wil*_*III 20

有一些应用程序驱动的情况,您希望使用全局唯一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就是您所获得的.


Cor*_*bin 1

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