phpbar.de logo

Mailinglisten-Archive

AW: [php] Generelle Frage zum Index

AW: [php] Generelle Frage zum Index

Sebastian Mendel lists at sebastianmendel.de
Fre Nov 18 11:34:23 CET 2005


ANGEL Harald wrote:
> Sebastian Mendel:
>> generall hilft immer ein
>>   EXPLAIN [DEINE ABFRAGE]
>> (geht auch über phpMyAdmin: [SQL Erklären])
> 
> Besten Dank für den Tipp!
> Eine Frage hab ich noch zur HAVING - Clausel. Kann man da keine Indizes verwenden?

HAVING verhält sich etwas anders WHERE, das es erst dann greift wenn 
alle Daten beriets 'zusammengetragen' wurden, WHERE hingegen greift 
beriets davor und verhindert so beriets das überhaupt Daten geholt 
werden die cniht gebraucht werden

> 
> Ich hab zB diesen SQL um meine Charts anzuzeigen:
> SELECT charts_lieder. * , SUM( charts_votes.punkte ) AS spunkte, user.nickname, user.farbe
> FROM charts_lieder
> LEFT JOIN charts_votes ON charts_lieder.id = charts_votes.liedid
> LEFT JOIN user ON charts_lieder.userid = user.userid
> GROUP BY charts_lieder.id
> HAVING charts_lieder.kw = '46'
> AND charts_lieder.jahr = '2005'
> AND charts_lieder.art =1
> AND charts_lieder.rang <> 0
> AND charts_lieder.online =1
> ORDER  BY charts_lieder.rang
> 
> Dieser SQL dauert relativ lange (5-10sec)
> Ich hab diesen Index angelegt:
> ALTER TABLE `charts_lieder` ADD INDEX `kw_jahr_art` 
> (`kw`,`jahr`,`art`)
> 
> Mach ich ein EXPLAIN sagt der aber, der verwendet den nicht.
> Wie kann man diese Abfrage anders Tunen?

probiers mal so:

     SELECT charts_lieder.*,
            SUM( charts_votes.punkte ) AS spunkte,
            user.nickname,
            user.farbe
       FROM charts_lieder
  LEFT JOIN charts_votes
         ON charts_lieder.id = charts_votes.liedid
  LEFT JOIN user
         ON charts_lieder.userid = user.userid
      WHERE charts_lieder.kw = '46'
        AND charts_lieder.jahr = '2005'
        AND charts_lieder.art = 1
        AND charts_lieder.rang <> 0
        AND charts_lieder.online =1
   GROUP BY charts_lieder.id
   ORDER BY charts_lieder.rang



-- 
Sebastian Mendel

www.sebastianmendel.de
www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet

php::bar PHP Wiki   -   Listenarchive