Đối với các tập hợp lớn, một JOIN có thể hoạt động tốt hơn truy vấn con.
SELECT ma.actor
, COUNT(1) AS total
, COUNT(1) / t.cnt * 100 AS `percentage`
FROM movies_actors ma
CROSS
JOIN (SELECT COUNT(1) AS cnt FROM movies_actors) t
GROUP
BY ma.actor
, t.cnt
Đối với các tập hợp lớn và khi một tỷ lệ phần trăm lớn các hàng đang được trả về, thì phép toán JOIN thường có thể hoạt động tốt hơn một truy vấn con. Trong trường hợp của bạn, nó không phải là một truy vấn con tương quan, vì vậy MySQL không cần phải thực thi điều đó nhiều lần, vì vậy nó có thể không tạo ra bất kỳ sự khác biệt nào.
Lưu ý cho những người không phải là người hâm mộ của COUNT(1)
... chúng tôi có thể thay thế bất kỳ và tất cả các lần xuất hiện của COUNT(1)
với COUNT(*)
hoặc IFNULL(SUM(1),0)
để đạt được kết quả tương đương.