aar*_*lin 12 sql-server-2008 database-design primary-key identity composite-types
我有一个带有复合主键(由 4 列组成)的表,用于确保没有重复项输入到表中。我现在需要一个新表,它需要将此表中的键作为外键引用。
我的问题是哪种方法对查找速度更有效:
1)我是否创建包含所有 4 列的新表并在外键中引用它们。
或者
2)我是否在主键表中创建一个新的标识列并将其用作新表中的外键。
预计该数据库将保存大量数据,因此我一直构建它,以期最大限度地减少每个表中保存的数据量。考虑到这一点,选项 2 将是最好的方法,因为我将为每一行保存 2 个 int 列和一个 datetime 列,但我想避免在不必要的情况下增加查找时间。
Jon*_*des 11
使用简单的合成整数 PK 的成本很小,并且在您的情况下的好处可能相当可观。
唯一想到的重大缺点是,您可能会失去从复合 PK 上的集群中受益的查询的性能。如果您认为这可能很重要,请继续在复合候选键上进行聚类,但将 PK 放在合成键上。
在 SQL 世界中,答案是:“视情况而定”。
看看这个问题的一些指针:在 SQL Server 中,自然键比代理整数键提供更高还是更低的性能?
在某些情况下,使用自然键作为外键时性能会有所提高。但是,在大多数情况下,使用较小的键(阅读:代理键)会更好。
如果您引入 IDENTITY 列,我什至会将其设为主键,并将“自然”列更改为 UNIQUE CONSTRAINT。
| 归档时间: |
|
| 查看次数: |
6436 次 |
| 最近记录: |