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