Forum
Hallo hke!
Danke für Deine Antwort. Bin erst aus dem Urlaub zurück gekommen, daher kommt meine Antwort so spät.
Meine Statistiken sehen wirklich ähnlich den von Dir geposteten aus:
SYSTABLESPACE NACTIVE 12
SYSTABLES NPAGES 1
SYSINDEXES NLEAF & NLEVELS 1 & 2
Da es sich dabei um einen nicht segmentierten Tablespace mit nur 1 Tabelle handelt, bin ich davon ausgegangen, dass ohnehin alle Pages des Tablespaces gelesen werden müssten. Dies stimmt jedoch nur, wenn alle Tablespace-Pages auch wirklich bereits mit Daten befüllt sind. Nun hat jeder Tablespace jedoch eine gewisse Default-Grösse, welche bei mir 12 Pages beträgt. Die Daten dieser Mini-Tabelle liegen natürlich auf 1 Datenpage. Da ist, wie Du richtig gemeint hast, ein Index-Zugriff besser, da ja ALLE RID’s auf 1 Datenpage zeigen.
Jetzt habe ich die Tabelle gelöscht und in einem explizit angelegten Tablespace (mit MAXROWS 1) neu angelegt, damit sich die Datenzeilen auf alle Tablespace-Pages verteilen (verifiziert mit DSN1PRNT). Eigentlich sollte damit doch der Indexzugriff nicht mehr gewählt werden, sondern stattdessen ein Tablespacescan.
Leider kann ich dies jedoch jetzt nicht mehr unter DB2-V8 auf z/OS ausprobieren, da ich Ende Mai nur temporär die Möglichkeit hatte, auf diesem System zu arbeiten. Bei den Host-Systemen, die ich dauerhaft im Zugriff habe, wird aus wirtschaftlichen Gründen noch V5 und V7 eingesetzt – LEIDER :'(
Und diese Systeme machen auch bei der ursprünglichen Variante einen Tablespacescan!
Unter Windows und AIX hätte ich zwar einige DB2’s (Version 7, 8 und 9) zum Testen, das ist aber eher weniger vergleichbar.
Ich nehme an, Du hast dauerhaften Zugang zu einem Host-DB2 mit Version 8!? Könntest Du bitte ausprobieren, ob auch dann ein Index verwendet wird, wenn ALLE Pages eines (mit MAXROWS 1 und wenig Pages angelegten) Tablespaces mit Daten der abzufragenden Tabelle beschrieben sind? Eigentlich wäre dann ja ein nonmatching index scan kontraproduktiv!
Gruss
Günter