Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết hợp SELECT DISTINCT với UNION DISTINCT trong MySQL - có hiệu quả không?

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)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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể di chuyển mảng từ php sang javascript để lấy lại từ cơ sở dữ liệu mysql không

  2. Tự động tạo hộp kiểm

  3. Tại sao tôi nhận được System.Data.DataRowView thay vì các giá trị thực trong Listbox của mình?

  4. Mã đăng nhập PHP không hoạt động, người dùng vẫn bị mắc kẹt trên trang đăng nhập

  5. Nhận tất cả các ký tự trước khoảng trắng trong MySQL