使用IN语句缓慢mysql删除查询

时间:2013-06-14 01:57:40

标签: mysql sql

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

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

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

2 个答案:

答案 0 :(得分: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都有索引,以最大限度地提高联接的效果。

答案 1 :(得分:1)

将其作为内部联接应该比执行IN + DISTINCT

快得多
DELETE A
FROM 
    TableA A
    INNER JOIN TableB B ON B.SomeID = A.SomeID AND B.Something = Blah