Hallo,
ich habe eine Tabelle mit ca. 100.000 Personen. Jede Person gehört nun noch zu einer bestimmten Gruppe (Referentiell Key).
Eine stored procedure liefert mir nun aus der Tabelle eine Menge von Personen, für die bestimmte Eigenschaften gelten (Alter, Wohnort, etc.) und liefert als Rückgabewert außerdem die Gruppe, in welcher diese Person ist.
Zusätzlich möchte ich nun noch als boni angeben, wieviel Personen grundsätzlich aus dieser Gruppe gefiltert wurden.
Beispiel (Personen sind alle 25 Jahre alt)
Name:Maier, Alter:25, Gruppe:7, Anzahl:3 (heißt, es befinden sich insgesamt 3 Personen auf dieser Liste, die in Gruppe 7 sind)
Name:Müller, Alter:25, Gruppe:1, Anzahl:1
Name:Edel, Alter:25, Gruppe:7, Anzahl:3
Name:Stark, Alter:25, Gruppe:7, Anzahl:3
Code:
for select vv_id,
vv_name,
vv_alter,
...
vv_gruppe
from vv_personas where vv_alter = 25 and vv_xyz is null and vv_abc is null
into :vv_id,
:vv_name,
:vv_alter,
:...
:gruppe
do begin
select count(vv_id) from vv_personas where vv_alter = 25 and vv_xyz is null and vv_abc is null
and vv_gruppe = :vv_gruppe into :vv_gruppencount;
suspend;
end
Auf das originäre Suchkriterium (vv_alter, vv_xyz, vv_abc) ist ein Index gesetzt, so dass hier ca. 400 indizierte reads ausgeführt werden. Durch das select(count) in der inneren Schleife werden nun je gefundenem Datensatz nochmal ca. 400 indizierte reads ausgeführt --> macht 20.000 reads.
Ich frage mich jetzt, ob man die originäre Liste (200 matched personas) irgendwie buffern kann, um das select count effizienter zu machen?