phpbar.de logo

Mailinglisten-Archive

langsame select mit group by

langsame select mit group by

Michael Donning donning at informenta.de
Die Aug 12 11:36:34 CEST 2003


Hallo Sebastian,

> -----Original Message-----
> From: Cybot [mailto:lists at sebastianmendel.de]
> ein reines
>
>   SELECT COUNT(*) FROM `artikel` GROUP BY `ort`
>
> benötigt 0,0009 sec.

Kein Wunder, ein Count(...) auf eine einzige Tabelle ohne Where ist
optimiert. Da schaut er nur kurz nach, wieviele Sätze die Tabelle hat.


> sobald aber eine WHERE hinzukommt
>
>   SELECT COUNT(*) FROM `artikel` WHERE `tinfo2` = '1' GROUP BY `ort`
>
> auf eines der drei felder benötigt es mindesten 0,11 sec, mit
> verwendetem index (ort,tinfo2)
>
> und das obwohl alle drei felder eine Kardinaltät von 1 haben, kann sie
> aber auch nicht weg lassen da sich das später noch ändern könnte

Obwohl?? Vielleicht verstehe ich hier was nicht richtig, aber das Handbuch
nennt als Kardinalität eines Indexes (nicht Feldes) die Anzahl der
eindeutigen Werte in der Tabelle. 1 heißt also: MySql ist der Meinung die
Spalte bzw der Index hat in der gesamten Tabelle den gleichen Wert. Dann
macht es natürlich auch keinen Sinn einen Index zu nehmen. Idealerweise
sollte sich die Kardinalität eines Indexes in Richtung der Anzahl der Sätze
in der Tabelle bewegen (oder zumindest grob im >1% Bereich, je nach
Anwendung).

Bist Du der Meinung die Kardinalität ist unbegründet, dann fehlt wohl noch
das Analyze bzw isamchk auf die Tabelle um die Statistiken zu aktualisieren.

Grüße,
Michael Donning

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive