2 bonnes requêtes valent mieux qu'un bon discours afin de comprendre sur quelle colonne grouper lorsque l'on veut obtenir le count d'une jointure.
La 1ère requête prend 12s :
SELECT n.*, COUNT(DISTINCT(l.like_id)) AS nb_likes FROM news n JOIN like l ON n.news_id = l.news_id GROUP BY l.news_id
La 2ème requête prend 0,5s :
SELECT n.*, COUNT(DISTINCT(l.like_id)) AS nb_likes FROM news n JOIN like l ON n.news_id = l.news_id GROUP BY n.news_id
Ces 2 requêtes donnent pourtant exactement le même résultat, à savoir l'ensemble des news ainsi que le nombre de likes par news.
Pour info, la table news comporte 300 enregistrements et la table like comporte 5M d'enregistrements.
La morale est la suivante : lorsque vous devez effectuer ce genre d'opération, effectuer toujours le group by sur la clé (PK ou FK avec un index bien entendu) de la table la moins importante en terme de recordsets.