Mailinglisten-Archive |
> hat jemand von Euch ne Idee, wie sich folgende abfrage optimieren laesst ? > Im Prinzip dient sie dazu bestimmte daten eines artikels anzuzeigen und > zu visuallisieren, ob es in anderen tabellen (bild oder profil) noch min > einen ref. Datensatz > gibt. > Im moment benoetigt sie ca. 2sec :| > > -- > SELECT a.artnr_neu, a.wbez, h.name, a.okat, a.ukat, a.vk, > IF ( > a.kurz != '', 1, 0 > ) AS iskurz, > IF ( > a.lang != '', 1, 0 > ) AS islang, > IF ( > ia.imgid IS NULL , 0, 1 > ) AS isimg, > IF ( > pa.pid IS NULL , 0, 1 > ) AS isprof, rt.rank > FROM artdata a > LEFT JOIN hersteller h ON a.hersteller = h.id > LEFT JOIN img_to_art ia ON a.artnr_neu = ia.artnr > LEFT JOIN profkat_to_art pa ON a.artnr_neu = pa.artnr > LEFT JOIN rankingtotal rt ON a.artnr_neu = rt.artnr > GROUP BY a.artnr_neu > ORDER BY rt.rank DESC > LIMIT 0,15 davon ausgehend das nicht nur 1 sondern alles >0 als TRUE gewertet wird, versuch doch mal deine IF-konstrukte durch COUNT() zu ersetzen und davon ausgehend das 'string' auch als TRUE und '' als FALSE gewertet wird kannst du doch auf die ersten beiden IF's ganz verzichten, oder? SELECT a.artnr_neu, a.wbez, h.name, a.okat, a.ukat, a.vk, a.kurz AS iskurz, a.lang AS islang, COUNT(ia.imgid) AS isimg, COUNT(pa.pid) AS isprof, rt.rank FROM artdata a LEFT JOIN hersteller h ON a.hersteller = h.id LEFT JOIN img_to_art ia ON a.artnr_neu = ia.artnr LEFT JOIN profkat_to_art pa ON a.artnr_neu = pa.artnr LEFT JOIN rankingtotal rt ON a.artnr_neu = rt.artnr GROUP BY a.artnr_neu ORDER BY rt.rank DESC LIMIT 0,15 so in der art würde ich es mal probieren, kann sogar sein das du das group by dann weglassen kannst, .. mhm -- Sebastian Mendel info at sebastianmendel.de www.sebastianmendel.de www.tekkno4u.de www.nofetish.com -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive