2

組合のすべての質問がよく聞かれることは知っていますが、少し違いがあります。私は3つの異なるクエリ/テーブルセットですべてユニオンを実行します。最初の2つは、クエリの定義により、重複することはありませんが、3つ目は間違いなく重複します。

私の質問は、私が組合/組合すべてを行う順序は重要ですか?たとえば、重複がない最初の2つのテーブルでUNION ALLを実行してから、重複があるため3番目のテーブルでUNIONを実行する必要がありますか?それとも、順序を逆にすると順序が良くなりますか?それとも関係ありませんか?

本当の差し迫った問題ではなく、このタイプのシナリオにベストプラクティスがあったかどうか疑問に思っています。

4

1 に答える 1

3

UNION ALLは、追加の処理なしですべての行を返します。単純なUNIONは、重複を排除するために行セット全体をソートします。オプティマイザーは、インデックスと制約を調べることですべてを把握できる場合がありますが、いつでも次のように少し手を加えることができます。

  select * from table1
union all
  select * from table2
union all
  select *
  from (
    SELECT DISTINCT * from table3
  ) T

これにより、並べ替えと削除の複製がtable3でのみ実行されるようになります。

いつでも意図を人間のユーザーとコンパイラの両方に簡単かつ明確に伝えることができます。これはほぼ間違いなくコードを書く正しい方法です。この場合、パフォーマンスも向上する可能性があり、低下することはありません。

于 2013-03-19T18:35:12.497 に答える