EXISTSSQLが行の存在をチェックすることは理解していますが、式全体を評価しますか?たとえば、次のようになります。
IF EXISTS (SELECT TOP 1 1 FROM table WITH (NOLOCK))
BEGIN
...
END
このようなものよりも速くなります:
IF EXISTS (SELECT 1 FROM table WITH (NOLOCK))
BEGIN
...
END
EXISTSSQLが行の存在をチェックすることは理解していますが、式全体を評価しますか?たとえば、次のようになります。
IF EXISTS (SELECT TOP 1 1 FROM table WITH (NOLOCK))
BEGIN
...
END
このようなものよりも速くなります:
IF EXISTS (SELECT 1 FROM table WITH (NOLOCK))
BEGIN
...
END
式がtrueと評価されるため、Existsは最初のヒット後に停止します。したがって、top(1)-partは不要です。
どちらもまったく同じように実行する必要があります。SQL Serverは、これEXISTSが短絡操作であると見なし、戻り結果を評価せず、戻り結果があるかどうかを確認するだけです。
いいえ、ありません。
SQL ServerTOP評価する計画で使用しEXISTSます。
ステートメントは同一のクエリプランを生成するため、違いはありません。私の意見では、2番目の例の方が読みやすいです。