Thema: Delphi Sortierung mit Limit

Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Sortierung mit Limit

  Alt 1. Dez 2009, 15:47
Ein DB-Server ist gar nicht gut darin, Tabellen zu sortieren bzw. die Tabellen als (geordnete) 'Tabellen' aufzufassen. So gesehen ist schon die Bezeichnung 'Tabelle' unglücklich: Es sollte Datenmenge (Dataset) heißen, denn die Daten liegen per definitionem SQL ungeordnet in der Datenbank. Theoretisch darf sich die Reihenfolge bei einer unsortierten Datenmenge (keinerlei Index) bei jedem SELECT ändern.

Weil das so ist, hat man auch Probleme, die letzten 50 Zeilen einer "nach einem bestimmten Kriterium sortierten Datenmenge" zu bekommen. Du siest schon an der eigentlich korrekten Problemstellung, das das nicht so einfach ist.

So wie Du dir das überlegt hast, ist es schon ganz ok, bzw. würde ich das jetzt auch so machen.

Performanter wirst Du mit einem Index, wobei ich mal hoffe, das MySQL einen Index bei der Sortierung berücksichtigt. Erstelle also einen Index auf der Spalte 'Datum' und beachte dabei das RDBMS-typische Optimierungspotential (Manual lesen). Bei einigen RDBMS kann man nämlich einen Index absteigend sortiert anlegen, sodaß der dann direkt für die 'ORDER BY xxxx DESC' Klausel verwendet werden kann.

Wenn MySQL einen Query-Plan anzeigen kann, lerne, ihn zu lesen (wenn Du das nicht schon kannst). Mit reinen Zeitmessungen kommt man nämlich nicht weit, weil einige RDBMS die Abfragen cachen, sodaß der zweite (identische) Versuch einer Abfrage u.U. -wupps- sofort da ist.

Alternative als Denkanstoß, was man sonst noch machen kann (bestimmt langsamer, aber resourcenschonender):
SQL-Code:
Select * From Tabelle
 Where PrimaryKey in
   (select PrimaryKey from Tabelle order by datum desc limit 50)
order by datum
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat