phpbar.de logo

Mailinglisten-Archive

performance: MAX-CONCAT vs. selfjoin

performance: MAX-CONCAT vs. selfjoin

Christoph 'Le o' Weißenborn chw-le at gmx.de
Don Jul 29 13:29:26 CEST 2004


Hallo Christian,
hallo Liste,

also, mich würde mal noch die Performanz interressieren. Du (Christian) hast
zwar geschrieben, daß Du nicht so viele Werte in der Tabelle hast, aber
vielleicht läßt sich aus den kurzen Zeiten doch was ablesen...

Zitiere Christian Victor <christian at victormedia.de>:
> Korrekt lautet es:

[etwas umgeformt]
    SELECT `name`, MAX( `datum`) AS `datum`,
           SUBSTRING( MAX( CONCAT( `datum`, `raum`)), 11) AS `raum`
      FROM `raumnutzung`
  GROUP BY `name`
  ORDER BY `name`

obiges ist das mit dem etwas unschönen Trick. Die andere (SQL-genehmere)
Variante war:

     SELECT `name`, MAX( `datum`) AS `datum`, `raum`
       FROM `raumnutzung` AS `orig`
  LEFT JOIN `raumnutzung` AS `kopie`
         ON `orig`.`id` = `kopie`.`id`
   GROUP BY `name`
     HAVING `orig`.`datum` = MAX( `kopie`.`datum`)
   ORDER BY `name`

Zu beachten wäre, daß auf datum ein Index gelegt werden könnte/sein sollte. Eine
Frage ist, ob mysql den auch bei dem MAX-CONCAT Trick benutzen kann.

Probierst Du das bitte mal aus Christian?
Vielen Dank!


ps: Ich habe eine ganze Weile gebraucht, bis ich den Trick verstanden hatte.
Daher geb ich mal einen Hinweis:
 CONCAT( MAX( `datum`), `irgendeine_information`)) liefert sowas wie
 2004-06-01kindertag
 2004-07-29heute
 2003-11-11fasching
Also wenn man da das Maximum sucht, ist ja der Text hinten dran egal. Aber wenn
man das Maximum hat, kann man hinten die gesuchte Information "herausschneiden".


Beste Grüße,
 Christoph
-- 
Fingerprint=65B7 73B6 5969 AC2B 4572 39A2 0DBC DAC1 3D6A 45B7
email auch: chw- at gmx.de / mai01dzr at ...

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


php::bar PHP Wiki   -   Listenarchive