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