GUID与int ID自动增量

时间:2011-03-31 02:12:19

标签: database guid

我正试图将我的设计敏感度从LAMP堆栈转移到Microsoft堆栈,我只是想到了什么 - 我什么时候想要使用GUID?与旧的,可靠的自动递增的int相比,它有什么好处/缺点?

4 个答案:

答案 0 :(得分:9)

您的经验从未需要任何超出自动增量ID的内容可能表明GUID通常是寻找问题的解决方案。如果您遇到熟​​悉的模式不起作用的要求,请使用它们。微观无关紧要。

我见过的唯一现实场景是合并来自两个来源的表格。

答案 1 :(得分:3)

GUID的一个问题:

因为它们不是顺序的,所以数据库必须努力更新索引。使用顺序id,它通常可以将它追加到最后(或多或少)。由于GUID是随机的,因此必须将其适合现有块。也就是说,我们对某些表使用GUID,即使在相当重的负载下它们似乎也能正常工作。

答案 2 :(得分:1)

“旧的,可靠的自动递增的int”在很大程度上取决于数据库的可扩展性。当您具有至少两个主设备的设置时,自动递增停止在平凡的情况下工作。当然,解决这个问题并不困难,因为这是一个常见问题;不同的数据库引擎可以协调主设备之间的序列,例如,只有一个主设备可以从任何给定的序列分配。

当您分析数据时,通常需要从密钥中知道分片。自动递增的ID不包含有关哪个分片应该托管该记录的信息。

GUID以不同的方式解决问题;两个不同的主设备具有不同的主机标识符(通常是MAC地址)。由于这用于计算新的GUID,不同的主人不能创建碰撞的guid。此外,由于主机是ID的一部分,它可以用于直接识别保存记录的分片。

第三种选择是根本不使用代理键(既不是自动增量整数也不是guids)。

答案 3 :(得分:0)

我建议使用int ID而不是Guid,原因如下:

  • Int ID的大小为4字节(32位),但Guid的大小为16字节(128位),大4倍。在这种情况下,您可能会遇到性能问题和存储问题
  • 默认情况下,GUID不是顺序的(小心)
  • 可视化表格之间的链接和关系