EXCEPT
を誰もがあなたに言うことができる方法はありません 同等のOUTER JOIN
よりも常にまたは決して優れたパフォーマンスを発揮しません 。オプティマイザーは、インテントの記述方法に関係なく、適切な実行プランを選択します。
そうは言っても、これが私のガイドラインです:
EXCEPT
を使用する 少なくとも1つ 次のうち、正しいものは次のとおりです。
- クエリはより読みやすくなります(これはほとんどの場合当てはまります)。
- パフォーマンスが向上します。
そして両方 次のうち、正しいものは次のとおりです。
- クエリは意味的に同一の結果を生成し、すべてのエッジケースを含む十分な回帰テストを通じてこれを実証できます。
- パフォーマンスが低下することはありません(ここでも、すべてのエッジケースで、バッファプールのクリア、統計の更新、プランキャッシュのクリア、サービスの再起動などの環境の変化があります)。
同等のEXCEPT
を作成するのは難しい場合があることに注意してください。 JOIN
としてクエリを実行します より複雑になる、および/または列の一部の重複に依存しているが、他の列には依存していない。 NOT EXISTS
を書く 同等ですが、EXCEPT
よりも少し読みにくいです 達成するのははるかに簡単なはずです-そしてしばしばより良い計画につながるでしょう(しかし私は決してALWAYS
とは言わないことに注意してください またはNEVER
、私が今やった方法を除いて)。
このブログ投稿では、EXCEPT
が少なくとも1つのケースを示しています。 適切に構築されたLEFT OUTER JOIN
の両方によってパフォーマンスが向上しています そしてもちろん、同等のNOT EXISTS
バリエーション。