gigis
-
Posts
2 -
Joined
-
Last visited
Posts posted by gigis
-
-
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?
sql vaicaajums
in PHP un datubāzes
Posted
pievienoju indeksu laukam raksta_id komentāru tabulā, tagad viss notiek ļoti ātri, 0.3 sekundēs.
Paldies!
Šķiet, jāpalasa par indeksiem kaut kas :)