phpbar.de logo

Mailinglisten-Archive

query optimieren

query optimieren

Cybot 4t2.com-mysql at tekkno4u.de
Die Apr 1 21:13:51 CEST 2003


> 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