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

Tham gia bên trái nhanh hơn hay Tham gia bên trong nhanh hơn?

Nó phụ thuộc; chạy cả hai để tìm hiểu; sau đó chạy 'giải thích chọn' để giải thích.

Sự khác biệt về hiệu suất thực tế có thể từ "hầu như không tồn tại" đến "khá đáng kể" tùy thuộc vào số hàng trong A với id ='12345' không có bản ghi phù hợp nào trong B và C.

Cập nhật (dựa trên các kế hoạch truy vấn đã đăng)

Khi bạn sử dụng INNER JOIN, không quan trọng (dựa trên kết quả, không phải về hiệu suất) nên bắt đầu với bảng nào, vì vậy trình tối ưu hóa cố gắng chọn bảng mà nó cho là sẽ hoạt động tốt nhất. Có vẻ như bạn có chỉ mục trên tất cả các cột PK / FK thích hợp và bạn cũng không có chỉ mục trên friend_events.userid hoặc có quá nhiều bản ghi với userid = '13006' và nó không được sử dụng; một trong hai cách trình tối ưu hóa chọn bảng có ít hàng làm "cơ sở" - trong trường hợp này là zcms_users .

Khi bạn sử dụng LEFT JOIN, nó hiện vấn đề (kết quả khôn ngoan) để bắt đầu với bảng nào; do đó friend_events được chọn. Bây giờ tại sao theo cách đó tôi không chắc sẽ mất ít thời gian hơn; Tôi đoán friend_events.userid điều kiện giúp đỡ. Nếu bạn thêm một chỉ mục (nó thực sự là varchar, btw? Không phải là số?) Vào đó, INNER JOIN của bạn có thể hoạt động khác (và cũng trở nên nhanh hơn).



  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ể sử dụng nhiều câu lệnh trong một truy vấn được chuẩn bị sẵn trên JDBC không?

  2. Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/mysql/mysql.sock' (38)

  3. Cách thực hiện nhiều truy vấn tới SQL

  4. Mã lỗi MySQL:1305. FUNCTION JSON_EXTRACT không tồn tại trong phiên bản máy khách MySQL:5.5.52

  5. Định dạng biến MySQL cho danh sách giá trị NOT IN