级联删除性能:删除一行的 1-Many 行的最快方法是什么?

Mik*_*e_G 3 t-sql sql-server

我有一个数据库,其中有一个父“帐户”行,然后该行与另一个表具有 1-Many 关系,并且该表与另一个表具有 1-Many 关系。这大约有 6 个级别深(帐户在顶部)。在最底部可能有数千(甚至可能超过 100k)行。在每个表上都有一个外键设置为在删除时级联。

问题是,如果我尝试删除最顶行(“帐户”),可能需要几分钟,有时甚至超过 10 分钟。是否有更快的方法来删除所有行(例如可能在单个删除语句中自下而上)或者几乎是级联的?

我在服务器上使用 MSSQL 2005 和 MSSQL 2008,使用 L2S 来执行删除,但如果速度更快,我可以使用 T-SQL 语句。

我也试过从 SQL Management Studio 中进行删除,这需要同样长的时间。

编辑:我们尝试重新索引数据库,差异可以忽略不计,也许一两分钟的差异。感谢您的所有回答,看来我将不得不开始编写一些代码来进行软删除!

KM.*_*KM. 5

删除就是删除,如果要删除大量行(100k),则需要一段时间。

如果您执行软删除(例如将状态设置为“D”),您可以运行一项作业,以便随着时间的推移以 1,000 左右的批次实际删除行,它可能更适合您。软删除应该只更新标题行,而且速度会非常快。不过,您需要对应用程序进行编码以忽略这些“D”状态行及其子项。

编辑 进一步@Kane 的评论。您只能进行软删除,或者您可以进行软删除,然后进行批处理以进行实际删除(如果您真的想要)。如果驱动器空间不是问题,我会坚持使用软删除。