10

2 つのデータベース間のすべての変更を見つけるには、pk でテーブルを結合し、date_modified フィールドを使用して最新のレコードを選択する必要があります。EXCEPTテーブルのスキーマが同じであるため、使用するとパフォーマンスが向上します。で書き直したいのですが、の実装がすべての場合にaEXCEPTを上回るかどうかはわかりません。いつ使用するかについて、誰かがより技術的な説明をしてくれることを願っています。EXCEPTJOINEXCEPT

4

2 に答える 2

14

同等EXCEPTOUTER JOIN. インテントの記述方法に関係なく、オプティマイザは適切な実行計画を選択します。

とはいえ、ここに私のガイドラインがあります:


次の少なくとも 1 つEXCEPTに該当する場合に使用します。

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

また、次の両方が当てはまります

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

がより複雑になったり、列の一部の重複に依存しているが他の列には依存していないため、同等のEXCEPTクエリを作成するのは難しい場合があることに注意することが重要です。JOIN同等のものを書くことは、達成するのがはるかに簡単であるべきNOT EXISTSよりもわずかに読みにくいですが、多くの場合、より良い計画につながります (ただし、私が行った方法を除いて、またはとは決して言わないことに注意してください)。EXCEPTALWAYSNEVER

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

于 2013-02-04T18:39:01.817 に答える