Die schnellste Variante mit SQL ist:
Code:
/Free
clear MyVar;
Exec SQL Select 1 into :MyVar
From SysIbm/SysDummy1
where exists (Select 1
from ... inner join ...
... inner join ...
... inner join ...);
Etwas langsamger ist:
Code:
/Free
Clear MyVar;
Exec SQL Select 1 into :MyVar
from ... inner join ...
... inner join ...
... inner join ...
Fetch first row only;
Alles andere kannst Du vergessen.
Beide Methoden müssen aber immer noch langsamer sein als mehrere Chains oder SetLLs nacheinander auszuführen.
Ich vermute, Du hast Optimize for X Rows mit Fetch X Rows only verwechselt.
Optimize for X Rows ist das Optimierungsziel. Ist x eine kleine Zahl wird so optimiert, dass der 1. Block an Daten möglichst schnell zurückkommt. Bei einer sehr großen Zahl wird so optimiert, dass das Gesamt-Ergebnis möglichst schnell ermittelt wird. Ausschlag hat diese Angabe eigentlich nur, wenn der Optimizer überlegt ob Index-Access oder Table Scan.
Bei Select ... Into und Set mit Select-Statement muss sichergestellt werden, dass entweder genau 1 oder kein Datensatz zurückgegeben wird. Werden mehrere Datensätze zurückgegeben, wird ein negativer SQL code ausgegeben werden.
Birgitta
Bookmarks