sql >> データベース >  >> RDS >> Sqlserver

テーブルの列が同じ場合、EXCEPTはJOINよりも高速に実行されますか

    EXCEPTを誰もがあなたに言うことができる方法はありません 同等のOUTER JOINよりも常にまたは決して優れたパフォーマンスを発揮しません 。オプティマイザーは、インテントの記述方法に関係なく、適切な実行プランを選択します。

    そうは言っても、これが私のガイドラインです:

    EXCEPTを使用する 少なくとも1つ 次のうち、正しいものは次のとおりです。

    1. クエリはより読みやすくなります(これはほとんどの場合当てはまります)。
    2. パフォーマンスが向上します。

    そして両方 次のうち、正しいものは次のとおりです。

    1. クエリは意味的に同一の結果を生成し、すべてのエッジケースを含む十分な回帰テストを通じてこれを実証できます。
    2. パフォーマンスが低下することはありません(ここでも、すべてのエッジケースで、バッファプールのクリア、統計の更新、プランキャッシュのクリア、サービスの再起動などの環境の変化があります)。

    同等のEXCEPTを作成するのは難しい場合があることに注意してください。 JOINとしてクエリを実行します より複雑になる、および/または列の一部の重複に依存しているが、他の列には依存していない。 NOT EXISTSを書く 同等ですが、EXCEPTよりも少し読みにくいです 達成するのははるかに簡単なはずです-そしてしばしばより良い計画につながるでしょう(しかし私は決してALWAYSとは言わないことに注意してください またはNEVER 、私が今やった方法を除いて)。

    このブログ投稿では、EXCEPTが少なくとも1つのケースを示しています。 適切に構築されたLEFT OUTER JOINの両方によってパフォーマンスが向上しています そしてもちろん、同等のNOT EXISTS バリエーション。



    1. SQLServerでテーブル値関数を作成する

    2. CodeIgniter:提供された設定を使用してデータベースサーバーに接続できませんエラーメッセージ

    3. OracleSQLの日付との比較

    4. SQLでテーブルの名前を変更する方法