Ice*_*Ice 10 sql-server database-design data-modeling primary-key
SQL Server提供[rowguid]类型.我喜欢将其用作唯一主键,以标识要更新的行.如果您转储表并重新加载它,则会显示好处,而不会破坏SerialNo(标识)列.
在分布式数据库的特殊情况下,例如在笔记本电脑上的离线副本或类似的东西,没有其他工作.
你怎么看?开销太大了?
mar*_*c_s 18
作为逻辑意义上的主键(唯一标识您的行) - 是的,绝对是完全有道理的.
但是:在SQL Server中,主键默认情况下也是表上的聚类键,并且使用a ROWGUID作为聚类键是一个非常糟糕的主意.请参阅Kimberly Tripp的优秀GUID作为PRIMARY和/或群集密钥文章,深入了解为何不使用GUID进行群集.
由于GUID根据定义是随机的,因此您将拥有可怕的索引碎片,因此在插入,更新,删除和选择语句上的性能确实非常糟糕.
此外,由于群集密钥被添加到表上每个非聚集索引的每个字段,因此当使用16字节时,您在磁盘和服务器RAM上都浪费了大量空间GUID与4字节INT.
所以:是的,作为主键,ROWGUID有它的优点 - 但如果你使用它,绝对避免使用该列作为表中的聚类键!使用INT IDENTITY()或类似的东西.
对于群集密钥,理想情况下,您应该寻找四个功能:
INT IDENTITY()非常适合这种需要.是的 - 聚类键必须是唯一的,因为它用于物理定位表中的行 - 如果您选择的列不能保证是唯一的,SQL Server实际上会为您的聚类键添加一个四字节的唯一符号 - 再次,不是你想要的东西....
查看集群索引辩论的继续 - Kim Tripp("SQL Server索引的女王")的另一篇精彩而富有洞察力的文章,其中非常详尽地解释了所有这些要求.
渣
| 归档时间: |
|
| 查看次数: |
12051 次 |
| 最近记录: |