表没有聚集索引,那么如果我重建索引会发生什么?

表没有聚集索引,那么如果我重建索引会发生什么?

我们有一个供应商应用程序,它有一个 SQL Server 2005 数据库。在数据输入期间,应用程序将数据写入没有聚集索引的表。但是,该表上有许多索引。

我使用维护计划向导重建了该表的索引。

在性能测试期间,我们开始遇到死锁问题。死锁图显示,这个没有聚集索引的特定表是被争用的表。

然后我使用维护计划向导重建了填充因子为 80 的索引。现在没有死锁。您知道为什么这个填充因子会产生影响吗?

答案1

我能想到几种可能性。
@Chris 已经抢先说出了我要说的第一部分,所以我就不再重复了。

第二种,在我看来可能性较小,可能性是索引重建也更新了统计信息,并且 SQL 服务器现在正在使用不同的执行计划来避免死锁。

唯一真正能分辨的方法是仔细检查死锁图和 QEP 前后情况。如果问题已经“修复”,现在可能就无法做到这一点了。

最后,我怀疑这是否是一个永久的解决方案。

答案2

你不需要需要聚集索引,尽管这通常是一个好主意。当然,除非主键是 GUID,或者表中的记录经过大量删除/插入。我考虑的是纯临时存储表。

最有可能的是,死锁查询所使用的索引高度碎片化,这就是索引重建导致问题消失的原因。

您可以分析这些查询以查看其他索引是否有帮助。

相关内容