Tôi đã cấu trúc lại một phần chậm của một ứng dụng mà chúng tôi được thừa hưởng từ một công ty khác để sử dụng một phép nối bên trong thay vì truy vấn con như:
WHERE id IN (SELECT id FROM ...)
Truy vấn được cấu trúc lại chạy nhanh hơn khoảng 100 lần. (~ 50 giây đến ~ 0,3) Tôi mong đợi một sự cải thiện, nhưng có ai có thể giải thích tại sao nó lại quyết liệt như vậy không? Các cột được sử dụng trong mệnh đề where đều được lập chỉ mục. SQL có thực hiện truy vấn trong mệnh đề where một lần trên mỗi hàng hay không?
Cập nhật - Giải thích kết quả:
Sự khác biệt nằm ở phần thứ hai của truy vấn "where id in ()" -
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