Clusterindizes
Ein Clustering-Index bestimmt, wie Zeilen in einem Tabellenbereich physisch angeordnet (gruppiert) werden. Gruppierungsindizes bieten bei einigen Vorgängen erhebliche Leistungsvorteile, insbesondere bei solchen, die viele Datensätze umfassen. Beispiele für Vorgänge, die von Clustering-Indizes profitieren, sind Gruppierungsvorgänge, Sortiervorgänge und andere Vergleiche als "gleich".
Jeder Index, mit Ausnahme eines ausdrucksbasierten Index oder eines XML-Index, kann ein Clustering-Index sein. Sie können nur einen Clustering-Index für eine Tabelle definieren.
Sie können einen Clustering-Index für einen partitionierten Tabellenbereich oder einen segmentierten Tabellenbereich definieren. Auf einem partitionierten Tabellenbereich kann ein Clustering-Index ein Partitionierungsindex oder ein Sekundärindex sein. Wenn ein Clustering-Index in einer partitionierten Tabelle kein Partitionierungsindex ist, werden die Zeilen in Cluster-Reihenfolge innerhalb jeder Datenpartition angeordnet, anstatt Partitionen zu überspannen. (Vor Version 8 von Db2 UDB for z/OS® musste der Partitionierungsindex der Clustering-Index sein)
Wenn eine Tabelle einen Clustering-Index hat, bewirkt eine INSERT-Anweisung, dass Db2 die Datensätze so nah wie möglich in der Reihenfolge ihrer Indexwerte einfügt. Der erste Index, den Sie in der Tabelle definieren, dient implizit als Clustering-Index, es sei denn, Sie geben beim Erstellen oder Ändern eines anderen Indexes explizit CLUSTER an. Wenn Sie beispielsweise zuerst einen eindeutigen Index für die Spalte EMPNO der Tabelle EMP definieren, fügt Db2 Zeilen in der Reihenfolge der Mitarbeiteridentifikationsnummer in die Tabelle EMP ein, es sei denn, Sie definieren explizit einen anderen Index als Clustering-Index.
Obwohl eine Tabelle mehrere Indizes haben kann, kann nur ein Index ein Clustering-Index sein. Wenn Sie keinen Clustering-Index für eine Tabelle definieren, erkennt Db2 den ersten Index, der für die Tabelle erstellt wird, als impliziten Clustering-Index, wenn Datenzeilen sortiert werden.
- Definieren Sie immer einen Clustering-Index. Andernfalls wählt Db2 möglicherweise nicht den Schlüssel, den Sie für den Index bevorzugen.
- Definieren Sie die Reihenfolge eines Clustering-Index, um die Verarbeitung großer Datenmengen zu unterstützen.
Sie verwenden die CLUSTER-Klausel der CREATE INDEX- oder ALTER INDEX-Anweisung, um einen Clustering-Index zu definieren.
Beispiel
CREATE INDEX DEPT_IX
ON EMP
(DEPTNO ASC)
CLUSTER;Daher liegen alle Zeilen für dieselbe Abteilung wahrscheinlich nahe beieinander. Db2 kann in der Regel mit einem einzigen Lesevorgang auf alle Zeilen für diese Abteilung zugreifen. (Die Verwendung eines Clustering-Index garantiert nicht, dass alle Zeilen für dieselbe Abteilung auf derselben Seite gespeichert werden. Die tatsächliche Speicherung von Zeilen hängt von der Größe der Zeilen, der Anzahl der Zeilen und der Menge des verfügbaren freien Speicherplatzes ab. Ebenso können einige Seiten Zeilen für mehr als eine Abteilung enthalten.)
Die folgende Abbildung zeigt einen Clustering-Index in der Spalte "DEPT" der Tabelle "EMP". Es wird nur eine Teilmenge der Zeilen angezeigt.
Nehmen wir an, Sie erstellen anschließend einen Clustering-Index für dieselbe Tabelle. In diesem Fall identifiziert Db2 es als den Clustering-Index, ordnet aber die bereits in der Tabelle vorhandenen Daten nicht neu an. Die Organisation der Daten bleibt unverändert, wie sie mit dem ursprünglichen, von Ihnen erstellten Nicht-Clustering-Index war. Wenn jedoch das REORG-Dienstprogramm den Tabellenbereich neu organisiert, gruppiert Db2 die Daten entsprechend der Reihenfolge des neuen Gruppierungsindex. Wenn Sie also wissen, dass Sie einen Clustering-Index verwenden möchten, sollten Sie den Clustering-Index definieren, bevor Sie die Tabelle laden. Wenn dies nicht möglich ist, müssen Sie den Index definieren und dann die Tabelle neu organisieren. Wenn Sie nach dem Laden der Tabelle einen Clustering-Index erstellen oder löschen und neu erstellen, werden diese Änderungen nach einer anschließenden Reorganisation wirksam.