1. ホーム
  2. sql-server

[解決済み] SQL Server INとEXISTSのパフォーマンス比較

2022-07-21 18:50:43

質問

以下のうち、どちらがより効率的でしょうか?

を使うのはいつも少し慎重になっています。 IN を使うことに少し慎重になっていました。なぜなら、SQL Server は結果セットを大きな IF ステートメントに変換してしまうからです。大きな結果セットでは、これはパフォーマンスが低下する可能性があります。小さな結果セットでは、どちらを選択するのが良いのかわかりません。大きな結果セットでは EXISTS の方がより効率的ではありませんか?

WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)

vs.

WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])

どのように解決するのですか?

EXISTS はより高速に動作します。なぜなら、エンジンは一度ヒットを見つけると、条件が真であることが証明されたので、検索を終了するからです。

IN のように、サブクエリからすべての結果を収集してから、さらに処理を行います。