Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie der Clustering-Faktor von Oracle Index berechnet wird

Inhaltsverzeichnis

Was ist der Oracle-Index-Clustering-Faktor (CF)?

Der Clustering-Faktor ist eine Zahl, die den Grad angibt, in dem Daten in einer Tabelle im Vergleich zur indizierten Spalte zufällig verteilt sind. Vereinfacht ausgedrückt handelt es sich um die Anzahl der „Blockwechsel“ beim Lesen einer Tabelle über einen Index.

Es ist eine wichtige Statistik, die eine wichtige Rolle bei der Berechnung des Optimierers spielt. Es wird verwendet, um die Berechnung für die Index-Range-Scans zu gewichten. Wenn der Clustering-Faktor höher ist, sind die Kosten für den Scan des Indexbereichs höher

Ein guter Clustering-Faktor ist gleich (oder nahe) den Werten der Anzahl der Blöcke der Tabelle.

Ein schlechter Clustering-Faktor ist gleich (oder nahe) der Anzahl der Zeilen der Tabelle.

Wie wird CF berechnet?

Oracle berechnet den Clustering-Faktor, indem es einen vollständigen Scan des Index durchführt, der die Blattblöcke von Ende zu Ende durchläuft. Für jeden Eintrag in jedem Blatt prüft Oracle die absolute Dateinummer und die Block-ID, die aus der ROWID des indizierten Werts erhalten werden. Es zählt laufend, wie viele „unterschiedliche“ Blöcke Datenzeilen enthalten, auf die der Index verweist. Die Blockadresse aus dem ersten Eintrag wird mit der Blockadresse aus dem zweiten Eintrag verglichen. Wenn es sich um denselben Tabellenblock handelt, erhöht Oracle den Zähler nicht. Wenn die Tabellenblöcke unterschiedlich sind, fügt Oracle der Zählung eins hinzu. Dieser Zählvorgang wird von Eintrag zu Eintrag fortgesetzt, wobei immer der vorherige Eintrag mit dem aktuellen verglichen wird.

Das obige ist ein gutes CF-Beispiel, da CF gleich der Anzahl der Blöcke ist

Beispiel für einen Bad Clustering-Faktor

Hier ist der Clustering-Faktor gleich der Anzahl der Zeilen

Diese Zählmethode hat ihr eigenes unerwartetes Ergebnis. Angenommen, die Daten werden zufällig über eine kleine Gruppe von Blöcken gefüllt, aber nicht in der Reihenfolge in Bezug auf den Indexschlüssel, dann könnte eine Reihe von Zeilen über einer großen Gruppe von Blöcken erscheinen, obwohl es vielleicht nur wenige wirklich unterschiedliche Blöcke gibt . CF wäre also höher, berührt aber tatsächlich nur sehr wenige Blöcke. Dieses Problem kann in 12c gemildert werden, indem Tabelleneinstellungen verwendet und der tabellierte zwischengespeicherte Block angegeben wird.

Wie man den Clustering-Faktor in Oracle verbessert

Ein Index-Neuaufbau hätte keine Auswirkung auf den Clustering-Faktor. Die Tabelle muss sortiert und neu erstellt werden, um den Clusterfaktor zu verringern.

Abfrage zur Bestimmung des Clusterfaktors 

CF wird im Datenwörterbuch gespeichert und kann über dba_indexes (oder user_indexes) angezeigt werden.

Tatsächlich sind dort alle Indexstatistiken zu finden

SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;

Wie wirkt sich der Oracle-Index-Clustering-Faktor auf den Optimierungsplan aus?

Der Clustering-Faktor ist die primäre Statistik, die der Optimierer verwendet, um Indexzugriffspfade zu gewichten. Es handelt sich um eine Schätzung der Anzahl von LIOs zu Tabellenblöcken, die erforderlich sind, um alle Zeilen abzurufen, die die Abfrage der Reihe nach erfüllen. Je höher der Clustering-Faktor, desto mehr LIOs schätzt der Optimierer als erforderlich ein. Je mehr LIOs erforderlich sind, desto unattraktiver und damit kostspieliger wird die Verwendung des Index.

Verwandter Artikel
Oracle-Partitionsindex:Grundlegendes zum Oracle-Partitionsindex, Was sind globale, nicht partitionierte Indizes?, Was sind Indizes mit lokalem Präfix, lokaler Index ohne Präfix
Indizes für eine Tabelle in Oracle finden:In diesem Artikel finden Sie Abfragen dazu, wie Indexe für eine Tabelle in Oracle finden, alle Indizes im Schema auflisten, Indexstatus, Indexspalte
Indextypen in Oracle:Diese Seite enthält Informationen zu Oracle-Indizes, verschiedene Arten von Indexen in Oracle mit einem Beispiel, wie um den Index in Oracle zu erstellen/löschen/ändern
Virtual Index in Oracle :Was ist Virtual Index in Oracle? Verwendungen, Einschränkungen, Vorteile und Verwendung zum Überprüfen des Plans in der Oracle-Datenbank, versteckter Parameter _USE_NOSEGMENT_INDEXES