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