Bạn cần kiểm tra các kế hoạch thực hiện. Tuy nhiên, tôi hy vọng rằng các kế hoạch thực hiện là khác nhau - hoặc ít nhất chúng phải giống nhau trong một số trường hợp.
Truy vấn đầu tiên:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
có thể dễ dàng tận dụng các chỉ mục trên table1(a, b, c)
và table2(a, b, c)
trước thực hiện UNION
cuối cùng . Điều này sẽ tăng tốc độ kết hợp cuối cùng bằng cách giảm kích thước của dữ liệu. Truy vấn thứ hai không có lợi thế này.
Trên thực tế, cách hiệu quả nhất để viết truy vấn này có lẽ là có hai chỉ mục và sử dụng:
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)
Điều này gần như giống hệt nhau, mặc dù nó có thể xử lý NULL
các giá trị trong bảng thứ hai hơi khác một chút.