Uzdevums tas pats - komentāru saskaitīšana rakstiem
Sākotnēji bija tā:
$q = mysql_query("SELECT posts.* FROM posts");
while ($r = mysql_fetch_assoc($q)) {
...
$q2 = mysql_query("SELECT COUNT(id) FROM comments WHERE post_id = '$id'";
...
}
izpildes laiks 1.5 - 2 sekundes
Tas protams nav sevišķi racionāli, jo ciklā tiek atkārtots tas pats query, tāpēc nodomāju šo lietu optimizēt un salikt visu vienā vaicājumā:
$q = mysql_query("SELECT posts.*, COUNT(comments.id) skaits FROM posts, comments WHERE posts.id = comments.raksta_id GROUP BY posts.id");
šis kods izpildījās <0.5 sekundēs - ātruma ieguvums liels, tikai, kā jau minēja šīs tēmas autors, netiek atlasīti tie raksti, kam nav neviena komentāra. Tāpēc mēģināju izmantot LEFT JOIN un vaicājums izskatījās apmēram tā:
$q = mysql_query("SELECT posts.*, COUNT(comments.id) skaits FROM posts LEFT JOIN comments ON posts.id = comments.raksta_id GROUP BY posts.id");
šis kods strādāja kā vajadzīgs, bet izpildījās veselas 5-6 sekundes - 3 reizes ilgāk kā sākotnējā versija ar ciklu.
Vai tas ir normāli, ka LEFT JOIN izpildās tik ilgi, vai arī esmu kaut kur kļūdījies?