我在生产中有一个数据库应用程序,并且所有表使用当前设置为聚簇索引的GUID主键。由于性能考虑,我明白这是一个糟糕的设计。我一直在阅读这个话题,其中包括Kimberly Tripp的this great article。GUID主键,单独的聚簇索引列
我可以通过简单地创建INT
类型的自动递增索引列并将其设置为聚集索引来改善性能吗?我从Kimberly的文章中了解到,所有非聚集索引(如我的GUID主键继续前进,如果我这样做)将引用聚集索引。但是如果我使用WHERE
子句中的GUID主键搜索记录,这实际上是否会提高性能?
另外,为了获得性能增益,我是否必须按创建记录的自然顺序填充现有记录的新列?
编辑:为了解决这个问题,即是否是this other question重复:另一个问题是问一般对于性能考虑使用GUID主键的最佳实践。没有讨论具体的方法。另一方面,我的问题是要求特别是是否增加类型INT
类型的自动递增索引列将有助于改善带有GUID主键的问题。此外,我的问题是问我是否必须按照“自然顺序”填充新栏目才能实现收益,而由于其较高的通用性,另一个问题也未涉及。
是的,通过使用更合适的群集密钥来显着减少碎片,您的性能应该会更好。 GUID将是唯一的 - 所以你总是只提取一条记录,所以即使有一个额外的密钥查找,随着时间的推移,更好的碎片行为应该是有益的 –
可能的重复[有什么使用GUID的最佳实践作为主要关键,特别是关于性能?](http:// stackoverflow。com/questions/11938044 /使用guid-as-a-key-specific-rega的最佳做法) – AHiggins
@ Ahiggins - 请参阅我的编辑。 –