我可以在多大程度上依赖.net中的GUID

本文关键字:依赖 net 中的 GUID 程度 我可以 | 更新日期: 2023-09-27 18:08:19

在。net中我可以依赖多少GUID ?我的SA告诉我

我们将使用GUID作为所有表的主键。

我想知道GUID作为主键的可靠性。

有可能会有重复的吗?

我们真的应该这样用吗?

性能如何?

任何建议都会对我有帮助。

我可以在多大程度上依赖.net中的GUID

这是GUID的一些点,可以给你答案

优势:

  1. 整个服务器唯一。

劣势:

  1. 字符串值在连接、索引和条件中使用时不如整数值性能最佳。
  2. 比INT需要更多的存储空间

你可以阅读完整的文章:SQL SERVER - GUID vs INT -你的意见

您可能想看看这些文章:

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

如果我不需要主键在多个表和数据库中是唯一的,我个人会使用整数。我发现872A734AE4-E0EF-4D77-9F84-51A8365AC5A0更容易调试。

是的,可以有一个重复的,但它不会。GUID长度为32个字符,每个字符可以是0-F(十六进制)。这意味着有16^32种可能

因此,如果你在10年内每秒生成1 000 000个guid,那么你创建一个副本的机会大约是1/1079028307080601418897053。

在我看来,GUID是一个非常好的主键候选,因为您可以从任何地方生成它,而无需首先检查它是否已经存在于数据库中。

由于生日悖论(问题),如果您生成2^64 GUID,您有大约50%的几率找到副本…你快乐吗?(这是因为一个完全随机的GUID长128位,所以有2^128个不同的GUID。生日悖论告诉我们,如果你有大约根号(2^128)的GUID,你有50%的机会发生碰撞,我说完全随机的GUID,因为有一些标准类型的GUID,其中一些数字是固定的。但是。net不使用这些标准(阅读这里http://en.wikipedia.org/wiki/Globally_unique_identifier))

我要补充一点,如果你的问题是db的"速度"问题,你应该读这个:

提高集群索引GUID主键的性能

对于大多数情况,您可以假设它们永远不会重复,如果表中的ID被设置为主键,那么插入重复的ID无论如何都会出错。

在web应用程序中使用这些ID的一个好处是用户不能只用其他ID测试url,所以理论上会更安全(尽管你应该有服务器验证权限)

guid在统计上非常有可能是唯一的,因此,如果各种系统正在生成id,并且需要将所有这些id组合起来,那么guid是主键的良好候选项。

以离线模式工作,并将更改推回到中央db。