Jump to content
php.lv forumi

Lēns query's sanācis


Wuu

Recommended Posts

Beidziet cepies, tagad lapas ielāde notiek

[time] => 0.01

Kur nu vēl, kad pliks HTML tiks servēts. Nu būs 0.2 kaut kādā vienai lapai kur jauns komentārs parādīsies, tas tik un tā notiks vienreiz. Pie jauna komentāra.

Edited by Wuu
Link to comment
Share on other sites

Tev neko nemaksā replicēt komentu skaitu topics tabulā. Tas ir viens papildus db update saglabājot komentu. 

 

Tipa šitā UPDATE topics SET comments=comments+1 WHERE topicid=:id

 

Rezultātā topiku query paliek vienkāršāks, jo nav jādžoino komentu tabula

Datubāze atviegloti uzelpo

Link to comment
Share on other sites

> Tipa šitā UPDATE topics SET comments=comments+1 WHERE topicid=:id

 

Un tad ņemties, ka kkur nav pareizs skaits, jo kkur, ļoti sen, bija aizmirsta tranzakcija un programma izlidoja kkur pa vidu. Jebkurā gadījumā, to count nevarētu uztvert kā kko nopietnu un vajadzētu kkādu smuku mehānismu kas pārskrien pāri visiem rakstiem un sarēķina count no esošajiem komentāriem šim rakstam.

Link to comment
Share on other sites

Nu nez, nav bijušas problēmas ar papildus vaicājumiem, kas atsevišķu kolonnu pie ieraksta pievienošanas/dzēšanas izmaina. Šajā gadījumā tas nav svarīgi, taču pie liela vienlaicīgo lietotāju skaita un ierakstu daudzuma obligāti skaits ir jāglabā atsevišķā kolonnā. Turklāt vienmēr var ik pa laikam palaist kodu, kas atjauno skaitu. Performance ieguvums ir pamatīgs.

Link to comment
Share on other sites

Ja bail no kļūdām, kuras var ieviesties ilgtermiņā veicot vērtību summēšanu, var katru reizi pilnīgi precīzi aprēķināt vērtību:

UPDATE topics SET comments = (SELECT count(*) FROM comments WHERE topic_id=:id) WHERE topic_id=:id

Un bieži šis UPDATE topics .... WHERE topic_id=:id tāpat ir jāveic, jo teiksim papildus pie komentāra gribās pielikt, kad pēdējo reizi topiks aiztikts, lai var kārtot pēc aktualitātes, tāpat arī kaut kādu topic-a reitingu pārrēķināt.

Tā, ka tas beigās varētu izskatīties kaut kā tā:

UPDATE topics SET comments = (SELECT count(*) FROM comments WHERE topic_id=:id), last_commented=:last_commented, rating=:new_rating WHERE topic_id=:id
Edited by codez
Link to comment
Share on other sites

> Tipa šitā UPDATE topics SET comments=comments+1 WHERE topicid=:id

 

Un tad ņemties, ka kkur nav pareizs skaits, jo kkur, ļoti sen, bija aizmirsta tranzakcija un programma izlidoja kkur pa vidu. Jebkurā gadījumā, to count nevarētu uztvert kā kko nopietnu un vajadzētu kkādu smuku mehānismu kas pārskrien pāri visiem rakstiem un sarēķina count no esošajiem komentāriem šim rakstam.

 

Ja programma tiek līdz vietai, kur vajag replicēt komentāru skaitu, tad viss būs kārtībā ar šo variantu un fancy skaitīšanas variantu. Ja programma, netiks līdz count replicēšanai, tad arī tavs fancy skaitīšanas variants neizpildīsies.

 

Nav vērts sarežģīt to ko var nesarežģīt

 

Un vispār šitas bija koncepts. Reālais izpildījums būs atkarīgs no katra programmētāja izvirtušā pedantisma :)

 

P.S

Un vēl šādas vienkāršas lietas vajadzētu darīt jau sākumā, jo kad sistēma aizies un db sāks pildīties ar datiem, tad tur netikai šis query sāk bremzēt, bet vēl kaudze citu query

Edited by Kasspars
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...