tôi refactored một phần chậm chạp của một ứng dụng chúng ta thừa hưởng từ một công ty khác sử dụng một bên tham gia thay vì một subquery nhưcác truy vấn con vs tham gia
where id in (select id from ...)
Truy vấn refactored chạy khoảng 100x nhanh hơn. (~ 50 giây đến ~ 0,3) Tôi mong đợi một cải tiến, nhưng bất cứ ai có thể giải thích lý do tại sao nó quá quyết liệt? Các cột được sử dụng trong mệnh đề where đều được lập chỉ mục. Liệu SQL có thực thi truy vấn trong mệnh đề where một lần trên mỗi hàng hay một thứ gì đó không?
Cập nhật - Giải thích kết quả:
Sự khác biệt là ở phần thứ hai của "nơi id trong()" truy vấn -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 hàng được lập chỉ mục với tham gia:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index
Bản sao có thể có của [Tham gia và truy vấn phụ] (http://stackoverflow.com/questions/2577174/join-vs-sub-query) –
Không trùng lặp. Câu hỏi này đặc biệt về sự khác biệt về hiệu suất nổi bật. Các câu hỏi khác là tổng quát hơn, mở kết thúc về những ưu và khuyết điểm của mỗi phương pháp tiếp cận và tại sao một cách tiếp cận có vẻ phổ biến hơn. –