U moet de uitvoeringsplannen controleren. Ik zou echter verwachten dat de uitvoeringsplannen anders zijn -- of in ieder geval zouden ze dat in sommige omstandigheden moeten zijn.
De eerste vraag:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
kan gemakkelijk profiteren van indexen op table1(a, b, c)
en table2(a, b, c)
voor de laatste UNION
doen . Dit zou de uiteindelijke unie moeten versnellen door de omvang van de gegevens te verkleinen. De tweede zoekopdracht heeft dit voordeel niet.
In feite zou de meest efficiënte manier om deze query te schrijven waarschijnlijk zijn om de twee indexen te hebben en het volgende te gebruiken:
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)
Dit is bijna identiek, hoewel het NULL
kan verwerken waarden in de tweede tabel iets anders.