10. december 2007 - 12:41Der 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...
(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";
Fandt ud af det var serveren, der lavede lidt fejl
Synes godt om
Ny brugerNybegynder
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.