AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Sortierung mit Limit
Thema durchsuchen
Ansicht
Themen-Optionen

Sortierung mit Limit

Ein Thema von fatalerror · begonnen am 1. Dez 2009 · letzter Beitrag vom 1. Dez 2009
Antwort Antwort
fatalerror
(Gast)

n/a Beiträge
 
#1

Sortierung mit Limit

  Alt 1. Dez 2009, 16:09
Datenbank: MYSQL • Version: 5 • Zugriff über: Zeos
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

Select * from ( Select * from tablexy order by datum DESC Limit 50)test order by datum ASC (Ja ich weiss, dass ich * nicht verwenden soll, ist hier nur zum einfacheren Verständnis aufgeführt)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Sortierung mit Limit

  Alt 1. Dez 2009, 16:16
Versuch mal Limit -50
Markus Kinzler
  Mit Zitat antworten Zitat
fatalerror
(Gast)

n/a Beiträge
 
#3

Re: Sortierung mit Limit

  Alt 1. Dez 2009, 16:21
Zitat von mkinzler:
Versuch mal Limit -50
funktioniert leider nicht:
#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
  Mit Zitat antworten Zitat
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, 16: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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Sortierung mit Limit

  Alt 1. Dez 2009, 16:50
Zudem ist eine DERIVED Table nicht per se inperformant
Markus Kinzler
  Mit Zitat antworten Zitat
fatalerror
(Gast)

n/a Beiträge
 
#6

Re: Sortierung mit Limit

  Alt 1. Dez 2009, 16:56
@alzaimer
@mkinzler

danke für die infos.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz