Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#7

AW: SQL optimimieren notwendig Max()

  Alt 17. Jan 2022, 11:00
Hab' ich das recht verstanden? Du suchst

Select datum From tabelle1 where Feld2 = 'Schraubeand Feld3 = 'kleinand Feld 3 <> ''

und davon dann den Satz mit dem höchsten Datum?

SQL-Code:
select max(Datum) as Max_Datum from (
  select datum
  from tabelle1
  where Feld2 = 'Schraubeand Feld3 = 'kleinand Feld 3 <> ''
)
Damit werden erstmal "nur" die Sätze gesucht, die per Index und Bedingung wohl recht schnell gefunden werden.

Von der nun recht kleinen "Restmenge" suchen wir anschließend das höchste Datum.

Das kann, aus Erfahrung, je nach Konstellation schonmal so die eine oder andere Minute an Abfragezeit einsparen.

Dann hast Du einen Index auf Feld1, Feld2 und Feld3. Feld1 ist aber nicht in der Wherebedingung enthalten und hat hier, als erstes Feld im Index (eventuell) keine Auswirkung bzw. der Index wird nicht oder nicht optimal genutzt.

Was sagt denn der Ausführungsplan zu der Abfrage?

Probiere es bitte mal mit dem geschachtelten SQL und einem Index nur auf Feld2 und Feld3.

Zu Uwes Anmerkung bezüglich der Wherebedingung und Deiner Antwort:
Zitat:
Doch das ist so gewollt bzw. die Vorgabe. Die Felder sind nicht NULL sondern teilweise leer und diese sollen hier nicht berücksichtig werden.
Wenn Feld3 = 'klein' ist, gilt zwangsläufig: Feld3 <> ' '.
Wenn diese reduntante Prüfung laut Vorgabe gewollt ist, sollte man mal die Sinnhaftigkeit der Vorgabe überprüfen.

Vorteil: Die Datenbank spart sich damit eine unnütze Abfrage, was sich in Bezug auf die Laufzeit (ggfls. sogar die Nutzung des Index) durchaus positiv auswirken kann.
  Mit Zitat antworten Zitat