Jump to content
php.lv forumi

gigis

Reģistrētie lietotāji
  • Posts

    2
  • Joined

  • Last visited

Posts posted by gigis

  1. 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?

×
×
  • Create New...