sql最適化:IN中のデータが大きい場合、INの代わりにEXISTSを使用する

2527 ワード

EXISTSとINの使用効率の比較
通常はinよりEXISTSの方が効率的です.inはインデックスを付けないので、実際の状況を見て使います.inは外見が大きくて内表が小さい場合に適していますが、EXISTSは外見が小さくて内表が大きい場合に適しています.内表すなわち条件表,t_temp、またはidリストを指す.ルックアップするテーブル、t_table.
inのsql文の使用
idリストが大きいと、クエリーの効率が大幅に低下します.また、データベースが単一のsqlのクエリーパラメータの個数に制限があるか、sqlのサイズに制限があるため、idリストが大きすぎると、これらの制限を超えてエラーが発生する可能性があります.
select id from t_table where id in(id  )

EXISTSを使用したsql文
sqlを2種類のsql文に分割する必要があります.まずid配列を一時テーブルt_に挿入します.temp、またクエリーします.sqlリストが大きすぎる場合は、単一の文挿入に分割する必要があります.
insert into t_temp (id) values (id1);
insert into t_temp (id) values (id2);
...
insert into t_temp (id) values (idn);
select a.id from t_table a where exists (select null from t_temp b where b.id = a.id);