【发布时间】:2013-08-31 14:16:33
【问题描述】:
我陷入了困境,想看看我是否能摆脱困境。我有一个数据库,其中包含在 uniqueidentifier 列上定义的表上的所有主键。这有点强迫我们,将“安全”作为原因之一。另一个我认为比较有价值的原因是一些表参与了复制。
我正在审查数据库,我觉得一个很容易避免的未来性能瓶颈是可以在所有表中添加自动增量 bigint 列并使其成为主键(集群)。并以某种方式正确地“附加” pk-fk 关系。但仍保留旧列以供将来使用。
在这方面有什么建议/cmets/donots?我们的是 c#/MSSQL Server R2/Linq 环境。
编辑: 看着 cmets,我意识到我遗漏了一些重要的细节。 所有主键 Guid 字段都是集群的,不,我没有使用 newsequentialId(我们使用 Linq to SQL,主键是在客户端生成的。涉及复制时,我们不确定从不同客户端环境正确生成顺序 ID 的方法冲突)。
我的“感觉”是由于已知的事实,即 guid 列上的聚集索引会导致高度碎片化,并且只会随着数据库的增长而恶化。
另外,我现在并没有真正尝试优化,而是尝试纠正一个糟糕的设计,以避免将来在数据库变得太大时出现问题。想知道现在是否值得这样做。
【问题讨论】:
-
and I feel one easily avoidable performance bottleneck is to may add auto-increment bigint,一点建议。不要优化感觉。 -
对您的数据库进行基准测试。使用
BIGINT将数据复制到另一个表,看看性能损失是否真的是个大问题。 -
附注这对dba.stackexchange.com 可能更好
-
guid 是否用作聚集索引。您使用的是顺序 guid 吗?
-
我建议您听取@neoistheone 的建议,然后在完成分析后删除聚集索引并选择更合适的列/列集进行聚集。这里也有很多信息stackoverflow.com/questions/277625/…
标签: c# sql-server sql-server-2008