Du skal tjekke udførelsesplanerne. Jeg ville dog forvente, at udførelsesplanerne er anderledes - eller i det mindste burde de være det under nogle omstændigheder.
Den første forespørgsel:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
kan nemt drage fordel af indekser på table1(a, b, c)
og table2(a, b, c)
før laver den sidste UNION
. Dette skulle fremskynde den endelige sammenslutning ved at reducere størrelsen af dataene. Den anden forespørgsel har ikke denne fordel.
Faktisk ville den mest effektive måde at skrive denne forespørgsel sandsynligvis være at have de to indekser og bruge:
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)
Dette er næsten identisk, selvom det kan håndtere NULL
værdier i den anden tabel lidt anderledes.