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