【发布时间】:2011-10-12 08:12:54
【问题描述】:
我有一个巨大的表(约 1000 万行),在随机唯一标识符列上具有聚集的 PK。如果还没有具有相同 pk 的行,我对该表执行的大多数操作是插入一个新行。 (为了提高它的性能,我使用 IGNORE_DUP_KEY = ON 选项)
我的问题是
我可以完全摆脱这张表上的聚集索引吗?我的意思是当我在具有聚集索引的表中插入一行时,它应该重新排列数据。是否最好删除聚集索引并在该列上创建非聚集索引以避免数据重新排列?
我无法在实时数据库上进行实验,因为如果性能下降会很头疼。在测试数据库上,我只能在聚集索引的情况下看到“聚集索引插入 100%”,在非聚集索引的情况下,在非聚集索引中看到“表插入”+ 一些查找操作。
提前致谢
【问题讨论】:
-
好吧,将 GUID 作为聚集索引并不是一个很好的选择,尤其是在大表上 - 请参阅 Kim Tripp: GUID as a primary key。尝试使用
INT IDENTITY作为您的集群键 - 应该会有很大的不同!但是不要完全摆脱你的集群键 - 堆甚至更慢...... -
同意 marc_s:你会看到很多页面拆分...
-
您是否确实进行了任何测量以表明聚集索引会导致插入性能问题?如果你只是猜测,我建议你先测量,遵循等待和队列方法:technet.microsoft.com/en-us/library/cc966413.aspx
标签: sql-server performance clustered-index