oracle hat mehrere Indizes. Dies sind: 1. „B*“-Zahlenindex, der einen schnellen Zugriff auf eine Zeile oder eine Reihe von Zeilen basierend auf dem Schlüssel ermöglicht. 2. Bitmap-Index, geeignet für sich stark wiederholende und normalerweise schreibgeschützte Daten; 4. Anwendungsdomänenindex, ein von Ihnen erstellter und gespeicherter Index. Sie müssen einen HASH-Cluster verwenden, um diesen Index zu verwenden 6. Partitionieren Sie den Index, teilen Sie einen Index in mehrere Teile auf.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle Version 19c, Dell G3-Computer.
Oracle bietet viele verschiedene Arten von Indizes zur Verwendung. Einfach ausgedrückt umfasst Oracle die folgenden Indizes:
1, B*-Baumindex
Das sind, was ich „traditionelle“ Indizes nenne. Dies ist bei weitem der am häufigsten verwendete Index in Oracle und den meisten anderen Datenbanken.
B*-Bäume sind ähnlich wie Binärbäume aufgebaut und können basierend auf dem Schlüssel einen schnellen Zugriff auf eine Zeile oder eine Reihe von Zeilen ermöglichen, wobei normalerweise nur wenige Lesevorgänge erforderlich sind, um die richtige Zeile zu finden. Es ist jedoch wichtig zu beachten, dass das „B“ im „B*-Baum“ nicht für binär, sondern für ausgeglichen steht. Ein B*-Baumindex ist kein Binärbaum, wie Sie erfahren werden, wenn wir vorstellen, wie man einen B*-Baum physisch auf der Festplatte speichert. B*-Baumindizes haben die folgenden Untertypen:
Indexorganisierte Tabelle: Indexorganisierte Tabellen werden in einer B*-Baumstruktur gespeichert. Im Gegensatz zu Heap-Tabellen, in denen Datenzeilen unorganisiert gespeichert werden (Daten können platziert werden, solange Platz verfügbar ist), werden Daten in IOT in der Reihenfolge der Primärschlüssel gespeichert und sortiert. Für die Anwendung verhält sich das IOT wie eine „normale“ Tabelle; für den korrekten Zugriff auf das IOT ist SQL erforderlich. IOT ist am nützlichsten für die Informationserfassung, räumliche Systeme und OLAP-Anwendungen. IoT wurde im vorherigen Kapitel ausführlich besprochen.
B*tree-Cluster-Index (B*tree-Cluster-Index) Dies ist eine Variante des traditionellen B*tree-Index (mit nur geringfügigen Änderungen). B*-Tree-Clustered-Indizes werden zur Indizierung von Cluster-Schlüsseln verwendet (siehe Abschnitt „Indizierung von Cluster-Tabellen“ in Kapitel 11), daher werden sie in diesem Kapitel nicht behandelt. In herkömmlichen B*-Bäumen verweisen Schlüssel auf eine Zeile; im Gegensatz zum B*-Baum-Clustering zeigt ein Clustering-Schlüssel auf einen Block, der mehrere Zeilen enthält, die sich auf diesen Clustering-Schlüssel beziehen.
Absteigender Index: Der absteigende Index ermöglicht die Sortierung von Daten in der Indexstruktur in der Reihenfolge „von groß nach klein“ (absteigende Reihenfolge) und nicht in der Reihenfolge „klein nach groß“ (aufsteigende Reihenfolge). Wir erklären, warum absteigende Indizes wichtig sind und wie absteigende Indizes funktionieren.
Umgekehrter Schlüsselindex: Dies ist ebenfalls ein B*-Baumindex, außer dass die Bytes im Schlüssel „umgekehrt“ werden. Bei einem invertierten Schlüsselindex können Indexeinträge gleichmäßiger im Index verteilt werden, wenn der Index mit aufsteigenden Werten gefüllt wird. Wenn Sie beispielsweise eine Sequenz zum Generieren eines Primärschlüssels verwenden, generiert die Sequenz Werte wie 987500, 987501, 987502 usw. Die Werte sind sequentiell. Wenn also ein herkömmlicher B*-Baumindex verwendet würde, könnten diese Werte im selben rechten Block platziert werden, was die Konkurrenz um diesen Block erhöht. Mit dem umgekehrten Schlüssel indiziert Oracle logisch 205789, 105789, 005789 usw. Oracle kehrt die gespeicherten Daten byteweise um, bevor sie in den Index eingefügt werden, sodass Werte, die im Index möglicherweise nebeneinander lagen, nach der Byteumkehrung weit voneinander entfernt sind. Durch die Umkehrung der Bytes werden Einfügungen in den Index über mehrere Blöcke verteilt.
2. Bitmap-Index (Bitmap-Index)
In einem B*-Baum besteht normalerweise eine Eins-zu-Eins-Beziehung zwischen Indexeinträgen und Zeilen: Ein Indexeintrag zeigt auf eine Zeile. Bei Bitmap-Indizes verwendet ein Indexeintrag eine Bitmap, um gleichzeitig auf mehrere Zeilen zu verweisen. Bitmap-Indizes eignen sich für Daten, die sich stark wiederholen und normalerweise schreibgeschützt sind (stark repetitiv bedeutet, dass die Daten im Verhältnis zur Gesamtzahl der Zeilen in der Tabelle nur wenige unterschiedliche Werte haben). Stellen Sie sich eine Tabelle mit 1 Million Zeilen vor, in der jede Spalte nur drei mögliche Werte hat: Y, N und NULL. Wenn Sie beispielsweise häufig zählen müssen, wie viele Zeilen den Wert Y haben, eignet sich dies zum Erstellen eines Bitmap-Index. Dies bedeutet jedoch nicht, dass, wenn eine bestimmte Spalte in dieser Tabelle 11.000 verschiedene Werte hat, kein Bitmap-Index erstellt werden kann. Natürlich kann auch für diese Spalte ein Bitmap-Index erstellt werden. In einer OLTP-Datenbank können Bitmap-Indizes aufgrund von Parallelitätsproblemen nicht berücksichtigt werden (wir werden später darauf eingehen). Beachten Sie, dass für Bitmap-Indizes Oracle Enterprise oder Personal Edition erforderlich ist.
Bitmap-Join-Index: Dies bietet eine Möglichkeit, Daten in einer Indexstruktur (anstelle einer Tabelle) zu denormalisieren. Betrachten Sie beispielsweise die einfachen EMP- und DEPT-Tabellen. Jemand könnte diese Frage stellen: „Wie viele Personen arbeiten in der Abteilung in Boston?“ Um die Anzahl der Mitarbeiter in der Abteilung mit dem LOC-Wert Boston zu zählen, müssen Sie normalerweise a ausfüllen Tabellenverknüpfungen und LOC-Spaltenverknüpfungen mit EMP-Datensätzen zur Beantwortung dieser Frage. Mithilfe eines Bitmap-Join-Index können Sie die LOC-Spalte in der EMP-Tabelle indizieren.
3. Funktionsbasierter Index
Dies sind B*-Baumindizes oder Bitmap-Indizes, die das Ergebnis einer Funktionsberechnung in der Spalte der Zeile speichern, anstatt die Spaltendaten selbst zu speichern. Sie können sich einen funktionsbasierten Index als einen Index für eine virtuelle Spalte (oder abgeleitete Spalte) vorstellen; mit anderen Worten: Die Spalte wird nicht physisch in der Tabelle gespeichert. Funktionsbasierte Indizes können verwendet werden, um Abfragen wie SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE zu beschleunigen, da der Wert FUNCTION(DATABASE_COLUMN) im Voraus berechnet und im Index gespeichert wurde.
4. Anwendungsdomänenindex (Anwendungsdomänenindex)
Der Anwendungsdomänenindex ist ein Index, den Sie selbst erstellen und speichern und der in Oracle oder außerhalb von Oracle gespeichert werden kann. Sie müssen dem Optimierer mitteilen, wie selektiv der Index ist und wie teuer die Ausführung ist, und der Optimierer entscheidet anhand der von Ihnen bereitgestellten Informationen, ob er Ihren Index verwendet. Oracle-Textindizes sind ein Beispiel für einen Anwendungsdomänenindex; Sie können auch Ihren eigenen mit denselben Tools erstellen, die Sie zum Erstellen von Oracle-Textindizes verwenden. Es sei darauf hingewiesen, dass der hier erstellte „Index“ nicht die Verwendung einer herkömmlichen Indexstruktur erfordert. Beispielsweise verwenden Oracle-Textindizes eine Reihe von Tabellen, um ihre Indexkonzepte zu implementieren.
5. HASH-Index
Um den HASH-Index zu verwenden, müssen Sie den HASH-Cluster verwenden. Wenn Sie einen Cluster oder HASH-Cluster erstellen, definieren Sie auch einen Clusterschlüssel. Dieser Schlüssel teilt Oracle mit, wie die Tabelle im Cluster gespeichert werden soll. Beim Speichern von Daten werden alle Zeilen, die sich auf diesen Clusterschlüssel beziehen, in einem Datenbankblock gespeichert. Wenn die Daten im selben Datenbankblock gespeichert sind und ein HASH-Index verwendet wird, kann Oracle auf die Daten zugreifen, indem es eine HASH-Funktion und E/A ausführt – und indem es einen B-Tree-Index der Binärhöhe 4 anwendet, den Sie verwenden müssen 4 I/O beim Abrufen der Daten.
Tipps: HASH-Indizes sind sehr nützlich, wenn Einschränkungen bestehen (die Angabe eines bestimmten Werts und nicht eines Wertebereichs ist erforderlich).
6. Partitionierter Index
Ein partitionierter Index unterteilt einen Index einfach in mehrere Fragmente, sodass auf kleinere Fragmente zugegriffen werden kann und diese Fragmente auf verschiedenen Festplatten gespeichert werden können (um E/A-Probleme zu vermeiden). Sowohl B-Nummern-Indizes als auch Bitmap-Indizes können partitioniert werden, HASH-Indizes können jedoch nicht partitioniert werden.
Es gibt zwei Arten von partitionierten Indizes: lokale partitionierte Indizes und globale partitionierte Indizes. Jeder Typ hat zwei Untertypen: mit Präfix und ohne Präfix. Wenn ein Bitmap-Index verwendet wird, muss es sich um einen lokalen Index handeln.
Der Hauptgrund für die Partitionierung des Index besteht darin, die Größe des zu lesenden Index zu reduzieren. Darüber hinaus kann die Platzierung der Partitionen in verschiedenen Tabellenbereichen die Verfügbarkeit und Zuverlässigkeit der Partitionen verbessern.
Das obige ist der detaillierte Inhalt vonHat Oracle mehrere Indizes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!