dedlfix: Dauert extrem lang

Beitrag lesen

Hi!

Jetzt bin ich es nochmal, ich habe jetzt deinen CODE 1 zu 1 an meine Tabelle angepasst,
es läuft braucht die Abfrage dauerte 58.1154 sek. (Tabelle hat 28000 Einträge). Ich habe extra die Berechnung eingegrenzt (denke ich jedenfalls)

Und was ist mit einem der anderen Vorschläge?

SELECT a.id, a.eintrag, a.date, IFNULL( SEC_TO_TIME( UNIX_TIMESTAMP( b.date ) - UNIX_TIMESTAMP( a.date ) ) , 0 ) AS differenz

FROM daten a
LEFT JOIN daten b ON ( a.id < b.id )
WHERE a.date > '2011-02-24 00:00:0'
GROUP BY a.id
ORDER BY id

  
Dieser Self-Join erzeugt erst einmal einen riesigen Datenberg, weil für jeden Datensatz soviele neue erzeugt werden, wie es welche mit kleinerer ID gibt - macht bei 28000 mal eben 784 Millionen temporäre Datensätze - hast du dafür genug Arbeitsspeicher frei? Anschließend werden sie durch das GROUP BY eingedampft. Und so wie das Statement jetzt ist, kann es auch nur von MySQL ausgeführt werden, weil die anderen Systeme beim Gruppieren wesentlich strenger sind, was das Verwenden von Feldern in der SELECT-Klausel angeht, über die nicht gruppiert wurde.  
  
Mit dem Ansatz kommst du prinzipbedingt auf keinen grünen Zweig, weil du beim Join keine Limitierung auf einen Datensatz anwenden kannst. Da wird wohl eher noch der Ansatz mit dem Subselect nach dem Vorgänger schneller sein. Ich schätze, der Umsortier-und-User-Variablen-Vorschlag wird das Rennen machen. (Indexe auf den Sortierkriterien einerseits und den Vorgänger-Find-Kriterien andererseits sollten vorhanden sein.)  
  
  
Lo!