2017-04-26 6 views
-1

私のデータベースでこのクエリを実行する必要がありますが、それは永遠にかかります。私はテーブルに1 000 000以上のレコードを持っています。より効率的にする方法はありますか?SQL Server:この削除クエリをより効率的にする方法を教えてください。

delete 
from CON 
where id in (select id 
      from CON co 
      where not exists (select id 
           from AC ac 
           where ac.ID = co.ID_) 
      ) 
+0

さらに、削除回数または残り回数はどれですか? –

+0

削除回数が多い – stianzz

+0

CONを参照する外部キー制約はありますか? –

答えて

0

あなたがin()をスキップしてちょうどnot exists()を使用することができますAC

内の項目
delete co from 
CON co left join 
Ac ac on ac.ID = co.ID_ 
where ac.ID is null 
0

と一致しませんCON内の項目を削除するには、以下のクエリを使用することができます。

delete 
from con 
where not exists (
    select 1 
    from ac 
    where ac.id = con.id 
    ); 

例のクエリを簡略化するときに削除されたことが他にある場合を除いて、

0

あなたの取引を小さくしたいですか?そのような時に10000行を削除してみてください。

delete TOP (10000)from CON 
where id in (
    select id 
    from CON co 
    where not exists (
    select id 
    from AC ac 
    where ac.ID = co.ID_ 
    ) 
) 
WHILE @@ROWCOUNT > 0 
    delete TOP (10000) from CON 
where id in (
    select id 
    from CON co 
    where not exists (
    select id 
    from AC ac 
    where ac.ID = co.ID_ 
    ) 
) 

一度に1000万行を使って実験してみてください。

関連する問題