SlowCycle.de » Mysql Query Optimizer
Mysql Query Optimizer
Der PRIMARY KEY `Id` ist per Definition UNIQUE, dennoch wird das DISTINCT vom Query OPTIMIZER
bei der Ausführung des Query nicht ignoriert.
Das schlägt sich natürlich erheblich auf die Ausführungszeit.
mysql> SELECT SQL_NO_CACHE COUNT(DISTINCT Id) FROM members; +--------------------------+ | count(DISTINCT Id) | +--------------------------+ | 71301 | +--------------------------+ 1 row in set (0.68 sec)
mysql> SELECT SQL_NO_CACHE COUNT(*) FROM members; +----------+ | count(*) | +----------+ | 71301 | +----------+ 1 row in set (0.03 sec)
Das Problem besteht zumindest noch in Version 5.0.32
mysql> SELECT VERSION(); +--------------------------+ | VERSION() | +--------------------------+ | 5.0.32-Debian_7etch3-log | +--------------------------+
1 Kommentar
1. Robert schrieb am 30th Juni 2009 um 11:56 :
Hi,
mach mal bitte ein EXPLAIN in beiden Fällen. Ich würde fast darauf wetten, dass im 2. Fall das Ergebnis “no table used” kommt, so fern es eine MYISAM-Tabelle ist. Somit wird das Ergebnis einfach aus den Meta-Daten gelesen, anstatt das Ganze wie mit DISTINCT zu berechnen. Ich würde nicht sagen, dass das ein “Problem” ist, sondern liegt einfach darin, dass der DISTINCT zum Gruppieren anregt und das erstmal probiert wird. Ein Check in MySQL für diesen Fall wäre sicher sinnlos; soll der Programmierer doch nachdenken
Gruß Robert
Gib deinen Kommentar ab