Devi controllare i piani di esecuzione. Tuttavia, mi aspetto che i piani di esecuzione siano diversi, o almeno dovrebbero esserlo in alcune circostanze.
La prima domanda:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
può facilmente sfruttare gli indici su table1(a, b, c)
e table2(a, b, c)
prima facendo la UNION
finale . Ciò dovrebbe accelerare l'unione finale riducendo le dimensioni dei dati. La seconda query non ha questo vantaggio.
In effetti, il modo più efficiente per scrivere questa query sarebbe probabilmente avere i due indici e utilizzare:
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)
Questo è quasi identico, anche se potrebbe gestire NULL
valori nella seconda tabella in modo leggermente diverso.