AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Performancefrage

Ein Thema von ChrisE · begonnen am 9. Aug 2011 · letzter Beitrag vom 10. Aug 2011
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Performancefrage

  Alt 9. Aug 2011, 12:47
Datenbank: Firebird • Version: 2.5. • Zugriff über: IBDAC
Hallo,

ich habe eine Tabelle Messungen in der sind verschiedene Informationen zu Messungen abgelegt Unter anderem auch der Startzeitpunkt als TIMESTAMP. Wenn ich jetzt die jüngste Messung haben möchte würde ich folgenden Select machen:
Code:
SELECT bla, blub, tralla FROM Messungen WHERE Startzeit = (select MAX(Startzeit) from Messungen);
Über den PrimeryKey ID: Integer kann ich nicht gehen, da die Messungen nicht zwingend chronologisch in der Datenbank abgelegt werden.

So, jetzt meine Fragen:
  • Gibt es eine Performantere Lösung (nur Select anpassen) für die Problemstellung?
  • Wenn man einen Index auf die Startzeit legen würde, würde es die Abfragegeschwindigkeit verbessern? (wobei ich nochmal klären sollte, ob es mehrere Messungen geben kann, die den selben Zeitpunkt haben. Aber das gilt für die gesammte Fragestellung )
  • Ändert es etwas an der Performance wenn man es in eine SP packt, oder ist die SELECT-Anweisung dafür zu simpel/klein?

Danke, Chris

P.S.: Gibt es eigentlich keine SQL-Tags?
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Performancefrage

  Alt 9. Aug 2011, 13:01
SELECT bla, blub, tralla FROM Messungen WHERE Startzeit = ( select first 1 startzeit from Messungen order by startzeit desc); Hierfür am Besten noche einen Index auf der Spalte Startzeit

BTW. SQL-Formatierung geht als Erweiterung des CODE-Tags (=SQL)
Markus Kinzler
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Performancefrage

  Alt 9. Aug 2011, 13:02
Hi Chris,

Sub-Selects sind IMHO nicht so performant wie andere Lösungen. Man sollte möglichst auf die verzichten. Deine Abfrage würde ich wie folgt umschreiben:

Code:
SELECT FIRST 1 bla, blub, tralla FROM Messungen ORDER BY Startzeit DESC
Ohne einen Index muss sowohl für "MAX(Startzeit)" als auch für "ORDER BY Startzeit DESC" die gesamte Tabelle gescannt werden. Die DB kann da keine Optimierungen vornehmen.

Dieser Fall schreit förmlich nach einem Index...kommt natürlich auf die Größe der Tabelle an.
Waldemar Derr
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#4

AW: Performancefrage

  Alt 9. Aug 2011, 13:16
Dabei ist es wichtig, dass ein absteigender Index angelegt wird.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Performancefrage

  Alt 9. Aug 2011, 13:19
BTW. SQL-Formatierung geht als Erweiterung des CODE-Tags (=SQL)
THX
Dieser Fall schreit förmlich nach einem Index...kommt natürlich auf die Größe der Tabelle an.
Dabei ist es wichtig, dass ein absteigender Index angelegt wird.
Das heißt, dass wenn ich die älteste Messung und die neueste möchte brauche ich zwei Indizes?

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#6

AW: Performancefrage

  Alt 9. Aug 2011, 13:25
Richtig.

MIN => aufsteigender (ASC) Index
MAX => absteigender (DESC) Index

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Performancefrage

  Alt 9. Aug 2011, 13:43
Danke Euch allen

Ich werde also zwei Indizes anlegen und die Variante SELECT FIRST 1 bla, blub, tralla FROM Messungen ORDER BY Startzeit DESC bzw ...ASC verwenden.

Bleibt nur noch die Frage ob man noch noch schneller bekommt mit einer SP?

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Performancefrage

  Alt 9. Aug 2011, 13:57
Bleibt nur noch die Frage ob man noch noch schneller bekommt mit einer SP?
Das wird sicherlich um einige Tausend CPU-Takte schneller, da das Parsen der Query entfällt. Aber den Performancegewinn wirst du nicht messen können

Fazit: Das lohnt sich nicht.
Waldemar Derr
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Performancefrage

  Alt 9. Aug 2011, 14:04
Fazit: Das lohnt sich nicht.
Danke

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#10

AW: Performancefrage

  Alt 9. Aug 2011, 18:09
Richtig.

MIN => aufsteigender (ASC) Index
MAX => absteigender (DESC) Index

Thomas
Echt? Ich muss doch beim Index für MIN bzw. MAX nur den ersten oder letzten Eintrag nehmen. Beide sind gleich schnell zu erhalten... I
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 10:56 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