2

ほぼ瞬時に実行される削除クエリを実行しています

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

IN ステートメント内でクエリを単独で実行すると、即座に実行されます。その結果をコンマで区切って外側のクエリに貼り付けると、そのクエリは即座に実行されます。ただし、それらを一緒に実行すると、24 秒かかります。内部クエリが行ごとに 1 回実行されるようです。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 に答える