Sie müssen die Ausführungspläne überprüfen. Ich würde jedoch erwarten, dass die Ausführungspläne unterschiedlich sind – oder zumindest sollten sie es unter bestimmten Umständen sein.
Die erste Abfrage:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
kann leicht Indizes auf table1(a, b, c)
nutzen und table2(a, b, c)
vorher macht die letzte UNION
. Dies sollte die endgültige Vereinigung beschleunigen, indem die Größe der Daten reduziert wird. Die zweite Abfrage hat diesen Vorteil nicht.
Tatsächlich wäre der effizienteste Weg, diese Abfrage zu schreiben, wahrscheinlich, die beiden Indizes zu haben und zu verwenden:
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)
Dies ist fast identisch, obwohl es NULL
behandeln könnte Werte in der zweiten Tabelle etwas anders.