08. november 2008 - 17:17Der er
6 kommentarer og 1 løsning
Optimering af sql forspørgelser
Hejsa...
Jeg kunne godt tænke mig at vide hvad jeg kunne optimere på mine SQL forspørgelser...
Fx: SELECT ft.id, u.username, IF(ft.date>ft.updated,ft.date,ft.updated) as mydate, count(fp.id) as postcounts, ft.title,u.id as uid FROM forum_threads ft, user u , forum_posts fp WHERE ft.userid =u.id AND ft.online = '1' AND fp.threadid = ft.id group by ft.id ORDER by mydate DESC LIMIT 20
Tabellerne: user indeholder 1450 rows forum_threads indeholder 25000 rows forum_posts indeholder 2300 rows
Der er lavet index på forum_posts (id, threadid)
Hvilket jeg jo ikke synes er mange...
Den er rigtig langsom (2-3 sekunder før den kommer) - Jeg bruger forresten MySQLyog...
Hvordan kan jeg optimere mine forspørgelser bedre?
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
Groft sagt skal du have index på alle felter, du bruger i din WHERE: WHERE ft.userid =u.id AND ft.online = '1' AND fp.threadid = ft.id Det vil gøre det lidt billigere at lave din SELECT, men lidt dyrere at lave INSERTs etc.
Men det kræver en lidt større analyse for at se om du så får for mange eller for få.
Undskyld jeg hijack'er, men kan WHERE-betingelserne indbyrdes rækkefølge have betydning? Altså: Vil der kunne opnås noget ved først at have de simple sammenligninger eller lignende?
Jeg spørger af ren interesse, da Erik kunne tænkes at vide en ting eller to derom :)
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.