我正在做一个删除查询,它应该立即运行
DELETE FROM
TableA
WHERE
TableA.SomeID IN (SELECT DISTINCT TableB.SomeID FROM TableB WHERE TableB.Something = Blah)
如果我自己在IN语句中执行查询,那么它会立即运行。如果我然后用逗号分隔它的结果并将它们粘贴到外部查询中,则该查询立即运行。但是,当我一起运行它需要24秒。这就像内部查询每行执行一次。我也尝试修改它以使用EXISTS语句,但这也很慢。我需要求助于临时表吗?
答案 0 :(得分:2)
嵌套子查询会很慢。请尝试使用JOIN:
DELETE A
FROM TableA AS A
INNER JOIN TableB AS B
ON A.SomeID = B.SomeID
WHERE B.Something = Blah
另外,请确保TableA.SomeID
和TableB.SomeID
都有索引,以最大限度地提高联接的效果。
答案 1 :(得分:1)
将其作为内部联接应该比执行IN + DISTINCT
快得多DELETE A
FROM
TableA A
INNER JOIN TableB B ON B.SomeID = A.SomeID AND B.Something = Blah