Avatar billede ttopholm Nybegynder
10. december 2007 - 12:41 Der er 2 kommentarer og
1 løsning

Optimering af mysql-kald

Hej

Hvordan kan jeg optimere denne bedre:
(SELECT t.tilbudID, tilbudNavn, FROM_UNIXTIME(tilbudCreateTS,'%d-%m-%Y') as dato, kommuneNavn, tilbudCreateTS, besvarelseID, tilbudBeskrivelse, IF(isnull(besvarelseTS), null, FROM_UNIXTIME(besvarelseTS, '%d-%m-%Y')) as besvarelseTS FROM firmaer f, tilbud t, kommuner k, kommunerIFirma kif, kategorierIFirma ka LEFT JOIN besvarelser b ON (f.firmaID = b.firmaID AND t.tilbudID = b.tilbudID) WHERE f.firmaID = kif.firmaID AND f.firmaID = ka.firmaID AND t.kategoriID = ka.kategoriID AND t.kommuneID = kif.kommuneID AND kif.kommuneID = k.kommuneID AND f.firmaID = 461 AND tilbudCreateTS > createTS AND tilbudActive = 1 AND inActiveTS = 0 AND t.tilbudID NOT IN (SELECT tilbudID FROM slettedeTilbud WHERE firmaID = 461)) UNION (SELECT t.tilbudID, tilbudNavn, FROM_UNIXTIME(tilbudCreateTS,'%d-%m-%Y') as dato, kommuneNavn, tilbudCreateTS, besvarelseID, tilbudBeskrivelse, IF(isnull(besvarelseTS), null, FROM_UNIXTIME(besvarelseTS, '%d-%m-%Y')) as besvarelseTS FROM firmaer f, tilbud t, kommuner k, kommunerIFirma kif, kategorierIFirma ka LEFT JOIN besvarelser b ON (f.firmaID = b.firmaID AND t.tilbudID = b.tilbudID) WHERE f.firmaID = kif.firmaID AND f.firmaID = ka.firmaID AND t.kategoriID = ka.kategoriID AND t.kommuneID = kif.kommuneID AND kif.kommuneID = k.kommuneID AND f.firmaID = 461 AND tilbudActive = 1 AND tilbudCreateTS < createTS AND inActiveTS = 0 AND t.tilbudID NOT IN (SELECT tilbudID FROM slettedeTilbud WHERE firmaID = 461) ORDER BY tilbudCreateTS DESC LIMIT 3) ORDER BY tilbudCreateTS DESC


Da den er 15-16 sekunder om at udføre queryen...

Det eneste variable er firmaID, i dette tilfælde 461...

Er der noget der kan optimeres...
Avatar billede ttopholm Nybegynder
10. december 2007 - 12:42 #1
(SELECT t.tilbudID,
                        tilbudNavn,
                        FROM_UNIXTIME(tilbudCreateTS,'%d-%m-%Y') as dato,
                        kommuneNavn,
                        tilbudCreateTS,
                        besvarelseID,
                        tilbudBeskrivelse,
                        IF(isnull(besvarelseTS), null, FROM_UNIXTIME(besvarelseTS, '%d-%m-%Y')) as besvarelseTS
                  FROM
                      firmaer f,
                      tilbud t,
                      kommuner k,
                      kommunerIFirma kif,
                      kategorierIFirma ka
                      LEFT JOIN besvarelser b ON (f.firmaID = b.firmaID AND t.tilbudID = b.tilbudID)    
                  WHERE f.firmaID = kif.firmaID AND
                          f.firmaID = ka.firmaID AND
                        t.kategoriID = ka.kategoriID AND
                        t.kommuneID = kif.kommuneID AND
                        kif.kommuneID = k.kommuneID AND
                        f.firmaID = " . $this->firmaID . "  AND
                        tilbudCreateTS > createTS AND
                        tilbudActive = 1 AND
                        inActiveTS = 0 AND
                        t.tilbudID NOT IN (SELECT tilbudID FROM slettedeTilbud WHERE firmaID = " . $this->firmaID . "))
                  UNION

                        (SELECT t.tilbudID,
                                tilbudNavn,
                                FROM_UNIXTIME(tilbudCreateTS,'%d-%m-%Y') as dato,
                                kommuneNavn,
                                tilbudCreateTS,
                                besvarelseID,
                                tilbudBeskrivelse,
                                IF(isnull(besvarelseTS), null, FROM_UNIXTIME(besvarelseTS, '%d-%m-%Y')) as besvarelseTS
                        FROM
                                firmaer f,
                                tilbud t,
                                kommuner k,
                                kommunerIFirma kif,
                                kategorierIFirma ka
                                LEFT JOIN besvarelser b ON (f.firmaID = b.firmaID AND t.tilbudID = b.tilbudID)    
                        WHERE f.firmaID = kif.firmaID AND
                                f.firmaID = ka.firmaID AND
                              t.kategoriID = ka.kategoriID AND
                              t.kommuneID = kif.kommuneID AND
                              kif.kommuneID = k.kommuneID AND
                              f.firmaID = " . $this->firmaID . " AND
                              tilbudActive = 1 AND
                              tilbudCreateTS < createTS AND
                              inActiveTS = 0 AND
                              t.tilbudID NOT IN (SELECT tilbudID FROM slettedeTilbud WHERE firmaID = " . $this->firmaID . ")
                        ORDER BY tilbudCreateTS DESC LIMIT 3)
                        ORDER BY tilbudCreateTS DESC";
Avatar billede ttopholm Nybegynder
10. december 2007 - 12:43 #2
Her er den lidt mere overskuelig...

Hvor det så er $this->firmaID der er variablen....
Avatar billede ttopholm Nybegynder
14. december 2007 - 16:24 #3
Lukker og slukker....

Fandt ud af det var serveren, der lavede lidt fejl
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester