【发布时间】:2010-07-15 06:55:11
【问题描述】:
我在类似主题上看到的大多数问题都与如何加快插入表格的速度有关。
我想知道如何加快删除速度?
我不能截断或删除表格,我必须做类似的事情
DELETE FROM table WHERE id IN (SELECT id FROM other_table)
【问题讨论】:
标签: performance sql-server-2005 sql-delete
我在类似主题上看到的大多数问题都与如何加快插入表格的速度有关。
我想知道如何加快删除速度?
我不能截断或删除表格,我必须做类似的事情
DELETE FROM table WHERE id IN (SELECT id FROM other_table)
【问题讨论】:
标签: performance sql-server-2005 sql-delete
对于您的情况没有具体的帮助,因为这取决于。
一般规则(如适用):
【讨论】:
需要遵循的一些一般性想法。
除此之外,这只是对导致您减速的原因的主观猜测。最好的办法是尝试一下,看看什么有帮助,什么使它变慢,了解如何在调用删除时找到行中的项目,并查看那里花费的时间最长。
【讨论】:
例子:
SELECT 'Starting'
WHILE ROWCOUNT <> 0
DELETE TOP (1000000) T
FROM table T
WHERE EXISTS (
SELECT * from otherTable OT WHERE T.id = OT.id
)
也许有一些灵感:Bulk DELETE on SQL Server 2008 和 7 billion row delete
【讨论】:
“table”是否在“id”列上有索引?
如果没有,SQL Server 可能会进行表扫描以查找要删除的记录。您可以通过在“id”列上创建索引来加快速度。
与“other_table”相同 - 如果该表上的选择也有 WHERE 子句,请检查那里使用的列是否已编入索引。
【讨论】:
分批删除,例如一次删除 1000 条记录。实际的删除需要更长的时间(确保有所需的索引),但在长时间运行的删除运行时,用户不会被锁定在表之外。
【讨论】: