2

我正在做一个删除查询,它应该可以立即运行

DELETE FROM
  TableA
WHERE
  TableA.SomeID IN (SELECT DISTINCT TableB.SomeID FROM TableB WHERE TableB.Something = Blah)

如果我自己在 IN 语句中执行查询,那么它会立即运行。如果然后我用逗号分隔结果并将它们粘贴到外部查询中,那么该查询会立即运行。但是,当我将它们一起运行时,需要 24 秒。这就像内部查询每行执行一次。我还尝试修改它以使用 EXISTS 语句,但这也很慢。我需要为此求助临时表吗?

4

2 回答 2

2

嵌套子查询会很慢。尝试使用 JOIN 代替:

DELETE A
FROM TableA AS A
INNER JOIN TableB AS B
    ON A.SomeID = B.SomeID 
WHERE B.Something = Blah

此外,确保TableA.SomeIDTableB.SomeID两者都有索引,以最大限度地提高连接的性能。

于 2013-06-14T02:00:43.210 回答
2

将其作为内部连接执行应该比执行 IN + DISTINCT 快得多

DELETE A
FROM 
    TableA A
    INNER JOIN TableB B ON B.SomeID = A.SomeID AND B.Something = Blah
于 2013-06-14T02:00:55.790 回答