表没有聚集索引,所以如果我重build索引会发生什么?

我们有一个供应商应用程序,它有一个SQL Server 2005数据库。 在数据input过程中,应用程序将数据写入到一个没有聚集索引的表上。 不过,它在桌面上有很多索引。

我使用维护计划向导来重build该表上的索引。

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

然后,我使用“维护计划”向导来使用fillfactor 80重build索引。现在没有死锁。 任何想法为什么这个fillfactor会有所作为?

有几种可能我可以想到。
@Chris已经打败了我,因为我想说的一部分,所以我不会重复。

第二个和IMO不大可能的情况是索引重build也更新了统计信息,而SQL服务器现在正在使用不同的执行计划来避免死锁。

要真正说明的唯一方法是仔细检查死锁图和QEP之前和之后。 如果问题已经“固定”,现在可能还不可能。

最后,我怀疑这将是一个永久的解决办法。

不需要聚集索引,尽pipe这通常是一个好主意。 当然,除非主键是一个GUID,否则表中的logging通过大量的删除/插入。 我正在考虑纯粹的临时存储表。

被锁死的查询所使用的索引很可能是高度分散的,这就是为什么索引重build导致问题消失的原因。

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