Untuk set besar, JOIN mungkin berkinerja lebih baik daripada subquery.
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
Untuk kumpulan besar, dan ketika sebagian besar baris dikembalikan, operasi GABUNG biasanya dapat mengungguli subkueri. Dalam kasus Anda, ini bukan subkueri yang berkorelasi, jadi MySQL tidak perlu mengeksekusinya beberapa kali, jadi mungkin tidak ada bedanya.
Catatan untuk non-penggemar COUNT(1)
... kita dapat mengganti setiap dan semua kemunculan COUNT(1)
dengan COUNT(*)
atau IFNULL(SUM(1),0)
untuk mencapai hasil yang setara.