Die Aufteilung könnte wie folgt aussehen ...
Dieses (eigentlich sehr simple) SQL kann auf Grund von riesen Datenmengen und entsprechte auswahlkriterien der Key-Felder enorm lang dauern:
Mit einer Aufteilung kann die DB die Anfrage besser verarbeiten und diverse Indices gezielt, und vor allem auch Parallel, verarbeiten:Code:SELECT * FROM TAB1 WHERE (SP1 = 'XXXX' OR SP2 = 'YYY') AND SP3 <> '1' AND SP3 <> '2' AND SP4 <> 'M' ORDER BY SP5 DESC FETCH FIRST 102 ROWS ONLY
Es sieht zunächst mal etwas viel aus, ist es aber im grunde nicht.Code:WITH p AS ( SELECT id FROM TAB1 WHERE SP1 = 'XXXX' AND SP3 <> '1' AND SP3 <> '2' AND SP4 <> 'M' ), v AS ( SELECT id FROM TAB1 WHERE SP2 = 'YYY' AND SP3 <> 'L' AND SP3 <> 'S' AND SP3 <> '1' ) , a AS ( SELECT id FROM (SELECT id FROM p Order By SP5 Desc FETCH FIRST 102 ROWS ONLY) T1 UNION SELECT id FROM (SELECT id FROM v Order By SP5 Desc FETCH FIRST 102 ROWS ONLY) T2 ) SELECT * FROM TAB1 WHERE id IN (SELECT id FROM a) Order By SP5 Desc FETCH FIRST 102 ROWS ONLY;
Und ein weiterer Vorteil mit WITH ist, dass du jede Abfrage einzeln testen und optimieren kannst.
Sicher gibt es auch noch andere Möglichkeiten, diese hat für mich jedoch perfekt geklappt.
lg Andreas
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks