![]() |
Datenbank: MYSQL • Version: 5 • Zugriff über: Zeos
Sortierung mit Limit
Ich benötige die letzten 50 Einträge aus einer Tabelle aber geordnet nach dem Datum.
DB: MySQL Folgendes Query löst zwar meine Anforderung, ich nehme aber an, dass dies doch performanter geht
Delphi-Quellcode:
(Ja ich weiss, dass ich * nicht verwenden soll, ist hier nur zum einfacheren Verständnis aufgeführt)
Select * from ( Select * from tablexy order by datum DESC Limit 50)test order by datum ASC
|
Re: Sortierung mit Limit
Versuch mal Limit -50
|
Re: Sortierung mit Limit
Zitat:
Delphi-Quellcode:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-50' at line 1
|
Re: Sortierung mit Limit
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 |
Re: Sortierung mit Limit
Zudem ist eine DERIVED Table nicht per se inperformant
|
Re: Sortierung mit Limit
@alzaimer
@mkinzler danke für die infos. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz