Hallo,
ich bin auf der Suche nach einem performanten SQL Ersatz für die RPG SETGT/READPE Kombination zur Ermittlung von Sätze mit einem "gültig ab" Datum.
Die Situation kennen sicherlich einige: Es gibt ein Tabelle mit Sätze die ein "gültg ab" Datum haben. Um für ein Datum nun den richtigen Satz zu finden, bediene ich mich der SETGT und READPE Operationen:
Code:
setgt (yKey:yDatum) tabelle;
readpe (yKey) tabelle;
if not %eof();
return yWert;
endif;
Ich suche nun eine performante Lösung dafür in SQL.
Um das gleiche Ergebnis für die Problematik zu bekommen, fallen mir zwei Varianten ein um den Wert zu ermitteln:
Variante 1:
Code:
SELECT wert
FROM Tabelle
WHERE key=:yKey
AND gueltig_ab<=:yDatum
ORDER BY gueltig_ab DESC
FETCH FIRST ROW ONLY
Variante 2:
Code:
SELECT wert
FROM tabelle
WHERE key=:yKey
AND gueltig_ab=
(SELECT MAX(gueltig_ab)
FROM tabelle
WHERE key=:yKey
AND gueltig_ab<=:yDatum
);
Ich habe ein kleine Testfall aufgebaut, der die Routinen unter gleichen Bedingungen mehrere 1000x durchführt. Dabei kommen folgende Zeiten raus:
SETGT/READPE: 1,788
SQL Variante 1: 13,381
SQL Variante 2: 12,445
Die SQL-Variante mit dem Subselect ist etwas schneller als die Variante mit ORDER BY. Beide sind aber deutlich langsamer als die SETGT/READPE-Variante.
Hat jemand noch eine Idee, wie mit SQL diese Problematik besser gelöst werden kann?
Gruß
Martin
Bookmarks