tsql删除行很慢

时间:2015-02-05 07:54:04

标签: performance tsql delete-row

我有一张不同文章的表格。这篇文章有两个状态:

  • 启用

用户只能订购已启用的文章。用户还可以删除新文章。这就是问题,删除一篇“新”文章花了太长时间。大约10分钟。原因是,其他表中有一些外键。大约有1000万份订单,1500万张钞票和500万份退货。

我已经在订单,账单和退货表上创建了不同的索引。 我还尝试禁用所有约束,删除文章并再次启用约束。如果禁用约束,它的工作速度非常快,但是再次启用我的约束需要大约10分钟。

有谁知道如何解决这个问题?该解决方案仅存在两年,并且表格将在未来几年继续增长,因此我需要一个能够长时间工作的解决方案。 我最好的想法是在文章表上创建一个“已删除”标志,但在这种情况下,我的文章表会增长得更快。

我可以发布执行计划,但它只会说,检查订单,账单和退货表花了太长时间。

1 个答案:

答案 0 :(得分:1)

相关表中外键列的索引应该可以解决问题:

CREATE INDEX ArticleID ON Orders (ArticleID)
CREATE INDEX ArticleID ON Bills (ArticleID)
CREATE INDEX ArticleID ON Returns (ArticleID)

如果您已经拥有这些索引但仍然无法正常工作,请查看执行计划并检查相关表中是否存在索引扫描或索引搜索。如果有扫描,则表示该表中没有合适的索引。如果您仍然遇到问题,请发布执行计划。