EXISTS
SQLが行の存在をチェックすることは理解していますが、式全体を評価しますか?たとえば、次のようになります。
IF EXISTS (SELECT TOP 1 1 FROM table WITH (NOLOCK))
BEGIN
...
END
このようなものよりも速くなります:
IF EXISTS (SELECT 1 FROM table WITH (NOLOCK))
BEGIN
...
END
EXISTS
SQLが行の存在をチェックすることは理解していますが、式全体を評価しますか?たとえば、次のようになります。
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 Server
TOP
評価する計画で使用しEXISTS
ます。
ステートメントは同一のクエリプランを生成するため、違いはありません。私の意見では、2番目の例の方が読みやすいです。