Anda perlu memeriksa rencana eksekusi. Namun, saya berharap bahwa rencana eksekusi berbeda -- atau setidaknya dalam beberapa keadaan.
Pertanyaan pertama:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
dapat dengan mudah memanfaatkan indeks pada table1(a, b, c)
dan table2(a, b, c)
sebelum melakukan UNION
terakhir . Ini akan mempercepat penyatuan akhir dengan mengurangi ukuran data. Kueri kedua tidak memiliki keunggulan ini.
Sebenarnya, cara paling efisien untuk menulis kueri ini mungkin adalah dengan memiliki dua indeks dan menggunakan:
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)
Ini hampir identik, meskipun mungkin menangani NULL
nilai di tabel kedua sedikit berbeda.