• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

COUNT ( DISTINCT )... dauert ewig auf schnellerem Rechner

Hallo Leute,

ich habe ein seltsames Problem mit einer SELECT COUNT Abfrage

Eine Tabelle names FILES mit ca. 800.000 Einträgen hält u.a. FILEHASH als Eigenschaft.

Das Statement

SELECT count( DISTINCT FILEHASH ) FROM FILES

dauert erwartungsgemäss nur ca. 0.02 sekunden auf meinem Entwicklungssystem.

Auf dem Produktionsserver, wo ansonsten alle Abfragen ca. 10 mal schneller sind,
dauert diese Abfrage 23 Sekunden !!

Hat jemand eine Idee ?

danke, Jürgen
 

nbkr

Guru
Du schreibst nicht welche DB das ist. Falls das bei der DB geht mach mal ein SELECT EXPLAIN ... evtl. fehlt irgendwo ein Primary Key.
 
OP
D

derJuergen

Newbie
DEV- Rechner: MySQL 4.1.15-Debian_1
PROD-Server: MySQL 4.1.18-standard-log

hier ist das Ergebnis von EXPLAIN ...

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE SHARE index NULL FILEHASH 32 NULL 808511 Using index

sieht doch gut aus, es gibt einen Index, genau so, wie auf dem
anderen Rechner.

bin echt ratlos...
 
OP
D

derJuergen

Newbie
danke,

hab ich natürlich schon gemacht, es gibt wenig Unterschiede,
die Cachegrössen habe ich höher gesetzt für den Prod.rechner,
weil er viel Speicher hat. Ansonsten ist alles gleich.

Auf dem DEV-Rechner habe ich jetzt 800.000 Zeilen in der
Tabelle, und es dauert dort jetzt auch über 30 sek.
 

panamajo

Guru
derJuergen schrieb:
Auf dem DEV-Rechner habe ich jetzt 800.000 Zeilen in der
Tabelle, und es dauert dort jetzt auch über 30 sek.
Das heisst du hattest auf dem DEV Rechner gat nicht genausoviele Einträge? Dann ist der Unterschied ja kein Wunder...
 
OP
D

derJuergen

Newbie
naja von 500.000 zu 800.000 ist das kein Sprung in der
Grössenordnung, aber 2 sekunden und 20 sekunden schon,

ok, vergessen wir das mit den beiden Rechnern, ich weiss auch
nicht mehr warum das auf dem DEV Rechner so schnell ging.

Jedenfalls : 20 Sekunden für

SELECT (DISTINCT HASH) FROM FILES

ist einfach too much !!
die Tabelle hat gerade mal 8 Spalten. Das ist nicht so komplex.

Ansonsten kann ich das Urteil MySQL skaliere sehr schlecht ab sofort bestätigen.

gruss, J.
 
Hast du mal versuch, ob ein GROUP BY das ganze beschleunigt? Musste ich schon erleben, dass ein DISTINCT die Tabelle durchnudelt, während der GROUP BY um einiges schneller war!

Mach mal das Beispiel an der Konsole um zu sehen ob das ein Ansatzpunkt wäre

SELECT DISTINCT(HASH) FROM FILES
vs
SELECT HASH FROM FILES GROUP BY HASH

Ich wette fast, das zweite Statement ist schneller.
 
OP
D

derJuergen

Newbie
es scheint ein Bug im query optimizer zu sein,
auch in den 5er Versionen von mysql.

siehe hier:

http://forums.mysql.com/read.php?10,73048,73392#msg-73392

http://bugs.mysql.com/bug.php?id=17865

gruss, j.
 
Oben