我可以依赖.Net中的GUID多少钱? 我的SA告诉我那个
我们将在所有表中使用GUID作为主键。
我想知道GUID作为主键的可靠性。
是否有可能存在重复?
我们真的应该这样使用吗?
表现怎么样?
任何建议对我都有帮助。
答案 0 :(得分:6)
这是GUID的一些要点,可以给你回答
优势:
缺点:
您可以阅读以下完整帖子:SQL SERVER – GUID vs INT – Your Opinion
答案 1 :(得分:4)
是的,可能有重复,但它不会。 GUID是32个字符长,每个字符可以是0-F(十六进制)。这意味着16 ^ 32种可能性。
因此,如果您在10年内每秒生成1 000 000个GUID,则创建副本的可能性大约为1/1079028307080601418897053。
在我看来,GUID是一个非常好的主键候选者,因为你可以从任何地方生成,而无需先检查它是否已存在于数据库中。
答案 2 :(得分:4)
您可能想看一下这些文章:
http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html
http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html
我个人使用整数,如果我不需要主键在几个表和数据库中是唯一的。我发现使用87
调试比2A734AE4-E0EF-4D77-9F84-51A8365AC5A0
更简单。
答案 3 :(得分:3)
感谢Birthday Paradox (Problem),如果你生成2 ^ 64 GUID,你有大约50%的人找到重复...你开心了吗? (这是因为一个完全随机的GUID长128位,所以有2 ^ 128个不同的GUID。生日悖论告诉我们,如果你有大约sqrt(2 ^ 128)GUID你有50%的碰撞几率我说完全随机的GUID,因为有一些标准类型的GUID,其中一些数字是固定的。但.NET不使用这些标准(请阅读http://en.wikipedia.org/wiki/Globally_unique_identifier))
我要补充一点,如果你的问题是db的“速度”问题,你应该读到这个:
答案 4 :(得分:2)
在大多数情况下,您可以假设它们永远不会复制,如果表中的ID设置为主键,则无论如何插入重复都会出错。
在Web应用程序中使用这些ID的一个优点是用户无法仅使用其他ID测试URL,因此理论上会更安全(尽管您应该对权限进行服务器验证)
答案 5 :(得分:0)
Guids在统计上非常可能是唯一的,因此如果各种系统生成ID并且所有这些都需要组合,则它们是主键的良好候选者。
EG。以脱机模式工作并将更改推回到中央数据库。