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

Sử dụng Liên minh hoặc Tham gia - Điều gì nhanh hơn

Union sẽ nhanh hơn, vì nó chỉ cần chuyển câu lệnh SELECT đầu tiên, sau đó phân tích cú pháp câu lệnh SELECT thứ hai và thêm kết quả vào cuối bảng đầu ra.

Tham gia sẽ đi qua từng hàng của cả hai bảng, việc tìm kiếm các kết quả phù hợp trong bảng khác do đó cần xử lý nhiều hơn do tìm kiếm các hàng phù hợp cho mỗi và mọi hàng.

CHỈNH SỬA

Bởi Union, ý tôi là Union All vì nó có vẻ phù hợp với những gì bạn đang cố gắng đạt được. Mặc dù một Liên minh bình thường thường nhanh hơn sau đó Tham gia.

EDIT 2 (Trả lời bình luận của @seebiscuit)

Tôi không đồng ý với anh ta. Về mặt kỹ thuật mà nói, cho dù phép nối của bạn có tốt đến đâu, thì "JOIN" vẫn đắt hơn một phép nối thuần túy. Tôi đã tạo một bài đăng trên blog để chứng minh điều đó tại blog của tôi codePERF [dot] net . Thực tế mà nói, chúng phục vụ 2 mục đích hoàn toàn khác nhau và điều quan trọng hơn là đảm bảo việc lập chỉ mục của bạn là đúng và sử dụng đúng công cụ cho công việc.

Về mặt kỹ thuật, tôi nghĩ rằng nó có thể được tóm tắt bằng cách sử dụng 2 kế hoạch thực hiện sau đây được lấy từ bài đăng trên blog của tôi:

UNION ALL Kế hoạch thực hiện

JOIN Kế hoạch thực hiện

Kết quả thực tế

Thực tế mà nói, sự khác biệt trong tra cứu chỉ mục theo nhóm là không đáng kể:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL THAM GIA chỉ vào hàng gần đây nhất?

  2. Đăng nhập bằng LDAP bằng JSF 2,1 &Apache Tomcat

  3. Cách lấy ngày hiện tại trong MySQL

  4. Truy vấn cập nhật MySQL bằng cách sử dụng kết hợp bên trái

  5. Cập nhật bằng cách sử dụng câu lệnh PDO