我正试图将我的设计敏感度从LAMP堆栈转移到Microsoft堆栈,我只是想到了什么 - 我什么时候想要使用GUID?与旧的,可靠的自动递增的int相比,它有什么好处/缺点?
答案 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,原因如下: