ExistsとInのどちらを書く?

Oracle Database パフォーマンス・チューニング・ガイド (B12449-01) に、記載があったのでメモ。

参照

記載場所

296枚目、12-12ページで見つけました。

以下、部分引用

ある環境では、EXISTS よりIN を使用したほうが適していることがあります。
一般に、
選択的述語が副問合せにある場合は、IN を使用します。
選択的述語が親問合せの中にある場合は、EXISTS を使用します。

                                                          • -

注意: この説明は、親SQL または副問合せへのアクセス・パスが選択性の高い索引付きの列を経由するようなOLTP 環境で最も当てはまります。
DSS 環境では、親SQL または副問合せの選択性が低い場合があり、結合列には索引がない可能性もあります。DSS 環境では、EXISTS の場合にセミ結合を使用することを考慮してください。

副問合せにIN 句を使用した場合に、副問合せで指定される選択性の利点を活用するために、Oracle が副問合せをリライトすることがあります。これは、最も選択性の高いフィルタが副問合せにある場合、結合列に索引がある場合に、最も有効です。
これに対し、EXISTS は、最も選択性の高いフィルタが親問合せにある場合に有効です。その場合、EXISTS 基準に照らして行をフィルタにかける前に、親問合せの選択的述語を適用できるからです。

                                                          • -

注意: 使用したリソース(V$SQLまたはV$SQLAREA からのBUFFER_GETS、DISK_READS またはCPU_TIME)の実際の数で、文のオプティマイザ・コストを検証する必要があります。
データの偏り(ヒストグラムを使用しない)などの状況は、オプティマイザの操作コストの見積りにマイナスの影響を与える可能性があります。


お客様へ説明する場合の、説得材料に・・・なるかな。
実作業的には、次あたりを読んでおく必要ありかと。