【发布时间】:2015-03-12 23:59:42
【问题描述】:
我有一个生产中的数据库应用程序,所有表都使用当前设置为聚集索引的 GUID 主键。我知道出于性能考虑,这是一个糟糕的设计。我一直在阅读有关该主题的很多内容,包括 Kimberly Tripp 的 this great article。
我可以通过简单地创建INT 类型的自动递增索引列并将其设置为聚集索引来提高性能吗?我从 Kimberly 的文章中了解到,所有非聚集索引(比如我的 GUID 主键,如果我这样做的话)都将引用聚集索引。但是,如果我在 WHERE 子句中使用 GUID 主键搜索记录,这实际上会提高性能吗?
另外,为了提高性能,我是否必须按照记录创建时间的自然顺序填充现有记录的新列?
编辑:要解决此问题是否与this other question 重复:另一个问题是询问有关使用 GUID 主键的性能注意事项的一般最佳实践。没有讨论具体的方法。另一方面,我的问题是询问具体是否添加 INT 类型的自动递增索引列将有助于改善 GUID 主键的问题。此外,我的问题是我是否必须按其“自然顺序”填充新列以实现收益,由于其更高的普遍性,另一个问题再次未解决。
【问题讨论】:
-
是的,通过使用更合适的集群键显着减少碎片,您的性能应该会更好。 GUID 将是唯一的 - 因此您始终只提取一条记录,因此即使涉及额外的密钥查找,随着时间的推移,更好的碎片行为应该是有益的
-
@AHiggins -- 请查看我的编辑。
标签: sql-server sql-server-2008-r2 primary-key clustered-index