Musíte zkontrolovat prováděcí plány. Očekával bych však, že prováděcí plány jsou odlišné – nebo by alespoň za určitých okolností měly být.
První dotaz:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
může snadno využít výhod indexů na table1(a, b, c)
a table2(a, b, c)
před uděláte poslední UNION
. To by mělo urychlit konečné sjednocení snížením velikosti dat. Druhý dotaz tuto výhodu nemá.
Ve skutečnosti by nejúčinnějším způsobem, jak napsat tento dotaz, pravděpodobně bylo mít dva indexy a použít:
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 je téměř identické, i když může zpracovat NULL
hodnoty ve druhé tabulce trochu jinak.