sql文の中でnot inに関する最適化

759 ワード

私のプロジェクトの本来の業務ロジックは、選択された回答を再確認して提出した後、再検査してから返事を選ぶことができません。私のsql
select  b.isactive isa, a.* 
from PRP_HSEQ_REFORMREPLY a left join 
PRP_HSEQ_RECHECK b on a.id = b.replynumid where b.isactive is null
しかし、今は業務の需要が変わっています。選択されたら続けて選ぶことができないのは簡単です。関係がない限り、選ばれます。
select * from PRP_HSEQ_REFORMREPLY a where id  not in (
   select a.id from PRP_HSEQ_REFORMREPLY a inner join  
   PRP_HSEQ_RECHECK b on a.id = b.replynumid
)
ただ、not inは全表検索なので、各結果を使ってサブアセンブリを巡回してデータを検索するのは効率が悪いです。
そこで、not exitsを通じて最適化することを考えました。exitsは結果true or falseだけを返します。効率は自然に高いです。以下は私の言葉です。
select * from PRP_HSEQ_REFORMREPLY a where not exists (   
 select  a.id
 from  PRP_HSEQ_RECHECK b where a.id = b.replynumid
 )