SELECT ... LEFT JOIN ... ORDER BY und Index Optomierungsproblem
am 06.03.2007 16:48:46 von hansHallo,
ich habe hier einen Query, der mir etwas Kopfzerbrechen bereitet.
SELECT ca. * , ra.rasse, IF( cp.points > 0, cp.points, 0 ) AS
points_nulled,
IF( cp2.points > 0, cp2.points, 0 ) AS points2, cp2.point_desc
FROM classifieds_ads ca
LEFT JOIN rassen ra ON ra.id =3D ca.race
LEFT JOIN classifieds_points cp ON cp.ad_id =3D ca.ad_id AND cp.point_id
=3D5
LEFT JOIN classifieds_points cp2 ON cp2.ad_id =3D ca.ad_id AND
cp2.point_id =3D10
WHERE exp_date > 1173189770 AND valid =3D1
AND (cp.point_id =3D5 OR cp.point_id IS NULL)
ORDER BY points_nulled DESC , ca.add_date DESC LIMIT 1180 , 20
EXPLAIN liefert
id select_type table type possible_keys key key_len ref rows
Extra
1 SIMPLE ca ref exp_date,valid,exp_date_2 valid 1 const 2696
Using where; Using temporary; Using filesort
1 SIMPLE ra ref id id 3 ca.race 1 Using index
1 SIMPLE cp ref ad_id,point_id,ad_id_2 ad_id_2 5 ca.ad_id 2
Using where; Using index
1 SIMPLE cp2 ref ad_id,point_id,ad_id_2 ad_id 5 ca.ad_id 2
Using where
Wie kann ich diese Abfrage so optimieren, dass ein Index benutzt wird?
Kann ich das mit UNIONs aufbauen?
Die Abfrage dauert 0.25 sec. Ich würde das gerne um den Faktor 10
bescheunigen.
Viele Grüße
Hans