对于已经有主键(由4列组成的自然组合键)的大型事务表(1亿行,20 GB),添加标识列并使其成为主键对性能有帮助吗?
当前的主键(4列的自然复合主键)完成了这项工作,但是有人告诉我,您应该始终有一个代理键。因此,可以通过创建标识列并使其成为主键?来提高性能。
我正在使用Server 2008 R2数据库。
编辑:此事务表主要连接到定义表,并用于填充报表。
编辑:如果我确实添加了一个代理键,它就不会在任何联接中使用。将使用现有的关键字段。
编辑:这个表将没有子表。
发布于 2011-06-27 14:18:32
只有下列情况下:
在每种情况下,表的PK (假定集群)将位于每个子条目/NC条目中。因此,使集群键更窄将受益。
如果您只有非NC索引(可能是一个),并且没有子表,那么您所能实现的就是
...but,您仍然需要当前4列上的索引/约束,不管怎么说,都是空间的增加。
如果您的4路键也捕获父表键(听起来很可能),那么您将失去重叠的优势。不过,新的索引/约束将涵盖这一点。
所以不,你可能不想这么做。
我们丢弃了billion+行表上的代理键(bigint),移动到实际的11路键,并通过65%+减少了磁盘上的空间,因为它的结构更简单(少一个索引,每页少一些行等等)。
发布于 2011-06-27 13:57:47
仅仅添加一个标识列并为其添加一个新的约束和索引是不可能提高性能的。该表将更大,因此扫描和寻找可能需要更长的时间。还将有更多的索引需要更新。当然,这一切都取决于你在衡量.以及在添加新列时是否打算对代码或数据库进行其他更改。添加身份列而不做其他操作可能是不明智的。
发布于 2011-06-27 14:30:52
考虑到您的编辑,尽管问题引发了所有的讨论,我还是建议在这个表中添加一个标识列会带来更大的伤害而不是好处。
https://stackoverflow.com/questions/6493792
复制相似问题