SQL Server中主键和唯一聚簇索引之间的性能差异

url*_*der 3 sql sql-server sql-server-2008

我们有2个表,大约有40M行.数据库的大小约为20GB,大多数是针对这两个表.每天,我们需要删除一些数据,即大约10M行.因此,我们使用批量删除将日志文件保持在一定的大小.

最初,表没有主键.但是每个表都有唯一的聚簇索引.删除需要永远.即在虚拟机上删除500K行需要大约2-3个小时.*删除之前,索引已重建.

现在,我们将唯一的聚簇索引转换为主键.删除2M行大约需要20-30分钟.

我知道主键和唯一聚簇索引之间存在差异,但为什么性能如此不同?

谁有洞察力?

谢谢

Rem*_*anu 6

滚动我的8-Ball:如果你声明了一个非聚集主键(似乎从你的帖子中建议),那么在每个批处理中你很可能会达到索引引爆点.因此,每个批次将执行40M行的完整扫描以删除批量大小.然后,在下一批次上,再次进行全扫描.依此类推,直到你的10M被删除.使用群集密钥,批处理应仅扫描要删除的实际行(当然,我假设您的批删除条件实际上将使用聚簇密钥...).如你所见,当一个人开始猜测时,有许多未知数......

但最终......你有一个性能问题,你应该使用性能故障排除技术进行调查.捕获执行计划,等待统计信息,统计信息io.遵循Waits和Queues等方法.测量.不要听互联网上有人推测8球的猜测 ......