phpbar.de logo

Mailinglisten-Archive

Merkwürdiges Verhalten by GROUP BY

Merkwürdiges Verhalten by GROUP BY

Andreas Müller mysql at universalware.de
Fre Okt 22 08:40:05 CEST 2004


Hallo zusammen,
mir ist gestern ein sehr merkwürdiges verhalten beim GROUP BY aufgefallen.
Btw. es handelt sich um Version 4.0.18 unter Win32.

Folgende Query wird ausgeführt:

select wv.ktypnr ktypnr,wp1.nr HA_nr,wp1.shortdescription
HA_text,d.shortname VA,wp2.nr VA_nr,wp2.shortdescription VA_text
from workassociation wa
left join direction d on d.direction_id=wa.direction_id
left join workvalue wv on wa.workvalue_id=wv.workvalue_id
left join workprocess wp1 on wp1.workprocess_id=wv.workprocess_id
left join workprocess wp2 on wp2.workprocess_id=wa.workprocess_id
group by wa.workvalue_id,wa.workprocess_id,wa.direction_id
having count(wa.workassociation_id)>1

workassociation: 22.000.000 Datensätze
direction: 4 Datensätze
workvalue: 15.800.000 Datensätze
workprocess: 27.000 Datensätze

Zum Datenmodell muss man sagen das immer Tabellenname_ID der PK ist. Wie man
einfach sehen kann ist das ganze ein Fulltabelscan über die workassociation
mit einem GROUP BY. Nebenbei werden paar Infos dazugejoint die aber nur
lookups sind da gegen PK der gejointen tabelle. So zeigt es auch explain.

Was nun passiert ist ein table handler error 26 - sprich - out of diskspace.
Nun ist auf der Maschine Platz genug (rund 10 GB). Also habe ich mal
beobachtet wie die Temp-Tabelle bei der Query wächst. Wenn ich mit meinen
Berechnungen nicht danebenliege scheint der aus VARCHAR Spalten CHAR Spalten
zu machen und damit die Temp-Tabelle sinnlos aufzublasen. Kann das sein ?

zur Info:
wp1.nr - varchar(10)
wp1.shortdescription - varchar(255)
d.shortname - char(1)
wp2.nr - varchar(10)
wp2.shortdescription - varchar(255)

Nach durchschnittlichen Datenmengen müssten bei Varchar-Feldern hier rund 3
GB Daten entstehen da die durchschnittlichen Länge in den Shortdescriptions
bei 37 liegt.
145 Byte * 22.000.000 = 3 GB

Hat irgendjemand ne Idee ob ich mit meiner Vermutung richtig liege? Und wenn
ja warum macht MySQL das so "blöd"? 

Gruß,
Andreas Müller

+--------------------------------------------------+
| Nur zwei Dinge sind unendlich:                   |
| Das Weltall und die menschliche Dummheit.        |
| Beim Weltall bin ich mir aber nicht ganz sicher. |
|                                                  |
| ~Albert Einstein~                                |
+--------------------------------------------------+


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


php::bar PHP Wiki   -   Listenarchive