TOM*_*ANG 18 sql-server database-design
我们的数据驻留在SQL Server 2008数据库中,表之间会有很多查询和连接.我们在团队内部有这个论点,有些人认为使用整数身份对性能更好,有些人则主张使用guid(唯一标识符).
使用GUID作为主键,性能是否真的遭受了严重影响?
ric*_*ent 31
128位GUID(uniqueidentifier)键当然比32位int键大4倍.但是,有一些关键优势:
SELECT如果您想要一些花哨的CAST()电话,您甚至可以根据日期/时间范围从主键.SELECT scope_identity()了插入后获取主键的步骤.bigint(64位)代替int.一旦你这样做,uniqueidentifier只是一倍大bigint.最后,通过使用整数来挤出一些小的性能优势可能不值得失去GUID的优点.根据经验进行测试并自行决定.
就个人而言,我仍然使用两者,具体取决于具体情况,但在我的情况下,决定因素从来没有真正归结为性能.
mar*_*c_s 20
我个人INT IDENTITY用于大多数主键和群集键.
您需要将作为逻辑构造的主键分开- 它唯一地标识您的行,它必须是唯一且稳定的NOT NULL.GUID也适用于主键 - 因为它保证是唯一的.如果使用SQL Server复制,GUID作为主键是一个不错的选择,因为在这种情况下,无论如何都需要唯一标识的GUID列.
SQL Server中的聚类键是一个物理构造,用于数据的物理排序,并且更难以正确.通常,SQL Server上的索引女王Kimberly Tripp也需要一个好的集群密钥,以便尽可能地缩小,稳定,理想地不断增加(所有这些INT IDENTITY都是).
在这里查看她关于索引的文章:
并且还将Jimmy Nilsson的GUID成本视为主要关键
对于聚类键,GUID是一个非常糟糕的选择,因为它很宽,完全随机,因此导致错误的索引碎片和糟糕的性能.此外,群集密钥行也存储在每个非群集(附加)索引的每个条目中,因此您确实希望保持较小 - GUID为16字节,而INT为4字节,并且有几个非聚集索引和几百万行,这是一个巨大的差异.
在SQL Server中,您的主键默认情况下是您的群集密钥 - 但它不一定是.您可以轻松地将GUID用作非群集主键,并将其INT IDENTITY作为群集密钥 - 只需要了解一点.
| 归档时间: |
|
| 查看次数: |
24145 次 |
| 最近记录: |