Doppeltes group by

woody_woodpecke

Grahams Jubiläumsapfel
Registriert
20.11.06
Beiträge
106
Hi,
ich hab einen Datenbank in der Logeinträge mit den folgenden Feldern gespeichert werden:
ID|Seriennummer|Artikelnummer|Zeit

Jetzt brauche ich alle Artikelnummern der letzten Einträge aller Seriennummer.

Ich will also zuerst nach Seriennummern welche nach Zeit sortiert sind gruppieren und das Ergebniss soll dann nach Artikelnummern gruppiert werden und nach Artikelnummern sortiert werden.

Bisher habe ich es mit folgendem subselect gelöst:
select Artikelnummer from (select Artikelnummer, Zeit from Log group by Seriennummer order by Zeit) group by Artikelnummer order by Artikelnummer;

Da ich aber über 100000 Einträge hab und es bald 1 Mio werden, dauert dieses Select jetzt schon über 5 Sekunden, was für meine Webapplikation zu lange ist.

Weiß jemand noch eine andere Möglichkeit, wie ich das schneller lösen kann?

mfg Stefan
 

maarten

Empire
Registriert
14.10.07
Beiträge
88
mir wird nicht ganz klar was du insgesammt bezwecken willst, was sind das für Seriennumemrn, steckt da eine ArtikelID nicht irgendwie mit drin? Ich wuerde die Tabelle schon irgendwie aufspaten, aber mir ist nicht klar was du genau brauchst. Versuche mal deine Anfrage etwas mehr "High-Level" zu beschreiben.
Gruss, Maarten
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Naja, du kannst die Einträge ganz simpel auf ein paar Seiten aufteilen. Sagen wir mal 1000 Einträge pro Seite. Du weiß ja sicher wie das mit LIMIT 0,1000 usw. funkioniert.

duderino
 

PressureDrop

Tokyo Rose
Registriert
07.12.06
Beiträge
68
Na ich würde mal ein paar Indizes erzeugen...eine Million Einträge ist doch noch nischt...
Übrigens ordnet in manchen DB`s der GROUP BY auch noch mal mit. Oder Du sortierst rückwärts und lässt Dir dann nur die ersten 100 Zeilen geben...
 

Toddy

Wohlschmecker aus Vierlanden
Registriert
10.05.04
Beiträge
242
Na ich würde mal ein paar Indizes erzeugen...eine Million Einträge ist doch noch nischt...[...]

Sehe ich genauso, 5 Sekunden für 100.000 Einträge, da kann was mit dem Index nicht stimmen, sofern nicht jede Zeile etliche MB an Daten beinhaltet (Was bei Serien- / Artikelnummer eher unwahrscheinlich ist) oder deine DB auf einem 386-er läuft...

Falls viele Zugriffe auf die DB kommen könnte man das Ergebnis noch Zwischenspeichern.

T.