Musisz sprawdzić plany wykonania. Spodziewam się jednak, że plany wykonania są różne – a przynajmniej powinny być w niektórych okolicznościach.
Pierwsze zapytanie:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
może łatwo korzystać z indeksów w table1(a, b, c)
i table2(a, b, c)
przed robienie ostatniego UNION
. Powinno to przyspieszyć ostateczną unię poprzez zmniejszenie rozmiaru danych. Drugie zapytanie nie ma tej przewagi.
W rzeczywistości najbardziej wydajnym sposobem napisania tego zapytania byłoby prawdopodobnie posiadanie dwóch indeksów i użycie:
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)
To jest prawie identyczne, chociaż może obsługiwać NULL
wartości w drugiej tabeli nieco inaczej.