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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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