実行計画を確認する必要があります。ただし、実行計画は異なると思います。少なくとも、状況によっては実行計画が異なるはずです。
最初のクエリ:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
table1(a, b, c)
のインデックスを簡単に利用できます およびtable2(a, b, c)
前 最後のUNION
を実行します 。これにより、データのサイズが縮小され、最終的な結合が高速化されます。 2番目のクエリにはこの利点はありません。
実際、このクエリを作成する最も効率的な方法は、おそらく2つのインデックスを作成し、次を使用することです。
SELECT DISTINCT a, b, c FROM table1 t1
UNION ALL
SELECT DISTINCT a, b, c
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.a = t1.a and t2.b = t1.b and t2.c = t1.c)
NULL
を処理する可能性はありますが、これはほとんど同じです。 2番目の表の値は少し異なります。