fastix®: Zusammenfassung der Lösungen

Beitrag lesen

Moin!

Naja. Ich denke wir machen den letzten Typo raus und geben als Lösungen:

SELECT `id`, `datum`, datediff('9999-12-31',`datum`) as `temp` FROM `tabelle`  
           WHERE `datum` <= '2011-09-15'  
           ORDER BY `temp`  
           LIMIT 0,5;

oder:

SELECT `id`, `datum`  
FROM (  
      SELECT `id`, `datum` FROM `tabelle`  
         WHERE `datum` <= '2011-09-15'  
         ORDER BY `datum` DESC  
         LIMIT 0,5  
     )  
ORDER BY `datum`;

an, die ähnlich performant sein dürften.

Noch spannender wäre eine Spalte rev_datum einzufügen, diese mit einem Index zu versehen, einmalig

UPDATE tabelleSETrev_datum=datediff('9999-12-31',datum);

auszuführen (und das bei jedem Eintrag/Update für die Zeile zu wiederholen) und dann

SELECT `id`, `datum` FROM `tabelle`  
           WHERE `datum` <= '2011-09-15'  
           ORDER BY `rev_datum`  
           LIMIT 0,5;

in Auftrag zu geben. Lohnt aber nur dann wenn die Anzahl und Ergebnismenge der SELECTS hoch ist und die der INSERTS/UPDATES niedrig. Bricht aber mit den Regeln der Normalisierung.

Vermutlich benötigt der Aufwand zu Lösung 3 mehr Arbeits- und Rechenzeit als jemals durch sämtliche Abfragen verursacht wird ...

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix