Трябва да проверите плановете за изпълнение. Въпреки това бих очаквал, че плановете за изпълнение са различни -- или поне би трябвало да бъдат при някои обстоятелства.
Първата заявка:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
може лесно да се възползва от индексите на table1(a, b, c)
и table2(a, b, c)
преди извършване на последното UNION
. Това трябва да ускори крайното обединение чрез намаляване на размера на данните. Второто запитване няма това предимство.
Всъщност най-ефективният начин да напишете тази заявка вероятно би бил да имате двата индекса и да използвате:
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)
Това е почти идентично, въпреки че може да обработва NULL
стойности във втората таблица малко по-различно.