Forum
Anonym
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