09. august 2009 - 18:28Der er
2 kommentarer og 1 løsning
udførselstid og resourcer
jeg vil gerne høre db eksperterne efter om det bedst kan svare sig at lave 3 små forespørgsler eller samle dem sammen som i eksemplet nedenfor
SELECT filefolder.id, filefolder.owner_user_id, filefolder.time_valid, user.name, COUNT(file_event.id) AS num_pic, tmp.num_tag FROM $DB.event_filefolder filefolder LEFT JOIN $DB.user user ON user.id=filefolder.owner_user_id LEFT JOIN $DB._file_event file_event ON file_event.ref_id=filefolder.id LEFT JOIN ( SELECT file.ref_id, COUNT(tag.id) AS num_tag FROM $DB._file_event file INNER JOIN $DB._file_event_tag tag ON tag.file_id=file.id GROUP BY file.ref_id ) tmp ON tmp.ref_id=filefolder.id WHERE filefolder.event_id='".$_GET['id']."' && filefolder.time_valid!=0 GROUP BY filefolder.id DESC
Nu er det ikke helt klart for mig hvad de tre små queryes du sammenligner med er.
Men generelt bør du nok teste med den slags spørgsmål.
Og allerførst skal du definere hvad bedst performance er: - laveste svartid for siden - lavest CPU forbrug på DB server - lavest IO operationer på DB Server - mindst båndbredde mellem web server og DB server
jamen hvis man f.eks. splittede query'en op som jeg skrev..
en som returnerer filefolder.* en som returnerer COUNT(file_event.id) en som returnerer COUNT(tag.id)
for mig og som du selv antyder skal man begrænse sine forespørgsler til db serveren hvilket jeg også har forsøgt i eksemplet :)
jeg har dog ikke lige fornuftig stor database at teste på, så ville egentlig bare vide om det nu også var fornuftigt at samle sine forespørgsler sammen eller om det bedst kunne svare sig at splitte dem op i små... i mit eksempel 3 mindre forespørgsler
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.