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

XHTML: Du kannst folgende Tags für deinen Kommentar nutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>