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:
Ich suche nun eine performante Lösung dafür in SQL.Code:setgt (yKey:yDatum) tabelle; readpe (yKey) tabelle; if not %eof(); return yWert; endif;
Um das gleiche Ergebnis für die Problematik zu bekommen, fallen mir zwei Varianten ein um den Wert zu ermitteln:
Variante 1:
Variante 2:Code:SELECT wert FROM Tabelle WHERE key=:yKey AND gueltig_ab<=:yDatum ORDER BY gueltig_ab DESC FETCH FIRST ROW ONLY
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
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks