![]() |
1
9
我个人对我的大多数主键和集群键使用int标识。 你需要分开 主键 这是一个逻辑结构——它唯一地标识您的行,它必须是唯一的、稳定的,不能为空。一个guid对于一个主键也能很好地工作-因为它被保证是唯一的。如果您使用SQL Server复制,那么使用GUID作为主键是一个不错的选择,因为在这种情况下,您无论如何都需要一个唯一标识的GUID列。 这个 聚类密钥 在SQL Server中,物理结构用于对数据进行物理排序,而且要正确排序要困难得多。通常,SQL Server上的索引皇后金伯利特里普(Kimberly Tripp)还需要一个良好的集群密钥,该密钥必须是uniqe、稳定的、尽可能窄的,并且理想情况下是不断增加的(int标识就是这样)。 请参阅她关于索引的文章:
对于集群密钥来说,guid是一个非常糟糕的选择,因为它很宽,完全是随机的,因此会导致索引碎片化和性能低下。此外,集群键行还存储在每个非集群(附加)索引的每个条目中,因此您确实希望保持较小的值-guid为16字节,int为4字节,并且有几个非集群索引和数百万行,这会产生巨大的差异。 在SQL Server中,您的主键在默认情况下是您的集群键——但不一定是。您可以很容易地使用一个guid作为非集群主键,使用一个int标识作为集群键——只需要注意一点。 |
![]() |
2
7
在需要确保唯一性的复制系统中使用GUID。 如果您有一个非复制的数据库,并且希望最大限度地提高性能,请使用ints。 |
![]() |
3
5
非常适合使用guid。 使用主键/代理键进行存储。 这也将使人们更容易与数据进行交互。 创建索引也会更有效率。 见 |
![]() |
4
4
当考虑使用整数时,一定要考虑可能出现的最大值。由于删除操作,您通常以跳过的数字结尾,因此实际的最大ID可能比表中的记录总数大得多。 例如,如果您不确定32位整数是否可行,请使用64位整数。 您可能还会发现这些其他讨论非常有用: How do you like your primary keys? Whatâs the best practice for Primary Keys in tables? Picking the best primary key + numbering system. 如果你在这里搜索“主键”,你会发现它们和很多非常有用的讨论。 |
![]() |
5
2
对此没有单一的答案。人们很快就可以使用guid(他们的随机性与 违约 主密钥的行为也充当集群密钥)可以很容易地减轻。guid的范围比整数大,但当您开始用值填充该范围时,会增加发生冲突的风险。 当您有一个分布式系统(例如,复制的数据库)时,guid可能非常有用,在该系统中,大量的工作必须进入密钥生成机制,而不会导致系统各部分之间的冲突。同样,整数也很有用,因为它们很容易使用(每种语言都有一个整型,不是每种语言都有一个guid类型),并且可以是连续的(guid也可以,但这不是它们的 打算 使用)。 所有这些都是关于你存储的东西和如何存储的。那些说“永远不要使用guid”的人!他们只是在传播FUD,但也不是每个问题的答案。 |
![]() |
6
2
我相信它几乎总是一个序列化的IDENTY整数,但有些人会不同意。这取决于具体情况。 认同的原因是效率和简单性。它更小。更容易索引。它创造了一个 伟大的 聚集索引。随着新记录的有序保存,碎片减少。对于连接的索引很好。在数据库中查看记录更容易。 在某些情况下,确实有一个地方可以放吉他。当合并不同的数据时,或者当必须在某些地方创建记录时。吉他应该放在你的技巧袋里,但通常不会是你的第一选择。 |
![]() |
7
2
这是一个经常争论的话题,但我倾向于更多地倾向于身份,原因有两个。首先,一个整数相对于一个16字节的guid只有4个字节。这意味着索引更窄,查询更高效。其次,我们利用
这里有一点不错 article by Jeff Atwood . |
![]() |
8
1
如果您认为需要使用数据库外部的数据,即其他数据库,请使用guid)。有人会争辩说,情况总是这样,但这是一种判断。 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |
![]() |
Patricia Rozario · 数据库设计确保一对一关系 7 年前 |
![]() |
dryhay · MySQL“多对多”关系错误 7 年前 |
![]() |
L. Fox · 我在这里用的是什么样的Laravel雄辩的关系 7 年前 |
![]() |
Geoff Harper · 我应该如何构建关系松散的SQL db 7 年前 |
![]() |
waroxx · SQL—当多个表具有相同的列时,最好怎么做 7 年前 |
![]() |
Lumpi01 · SQL 2不同的注释类型-最佳解决方案? 7 年前 |
![]() |
Hayreddin Tüzel · 预约系统数据库建模[关闭] 7 年前 |