Oracle Database
Indizes
Suche…
Einführung
Hier werde ich verschiedene Indizes anhand von Beispielen erklären, wie der Index die Abfrageleistung erhöht, wie der Index die DML-Leistung verringert usw.
B-Tree-Index
CREATE INDEX ord_customer_ix ON orders (customer_id);
Wenn wir nichts erwähnen, erstellt oracle standardmäßig einen Index als B-Tree-Index. Aber wir sollten wissen, wann wir damit umgehen sollen. Der B-Tree-Index speichert Daten als binäres Baumformat. Wie wir wissen, ist index ein Schemaobjekt, das für jeden Wert für die indizierte Spalte eine Art Eintrag speichert. Immer wenn in diesen Spalten gesucht wird, wird im Index nach dem genauen Ort des Datensatzes gesucht, um schnell darauf zugreifen zu können. Einige Punkte zur Indizierung:
- Um nach einem Eintrag im Index zu suchen, wird eine Art binärer Suchalgorithmus verwendet.
- Wenn die Kardinalität von Daten hoch ist, ist der B-Tree- Index perfekt zu verwenden.
- Durch den Index wird DML langsam, da für jeden Datensatz ein Eintrag für die indizierte Spalte im Index vorhanden sein sollte.
- Wenn dies nicht notwendig ist, sollten wir es daher vermeiden, einen Index zu erstellen.
Bitmap-Index
CREATE BITMAP INDEX
emp_bitmap_idx
ON index_demo (gender);
- Der Bitmap-Index wird verwendet, wenn die Kardinalität der Daten niedrig ist.
- Hier hat Gender einen Wert mit geringer Kardinalität. Werte sind möglicherweise männlich, weiblich und andere.
- Wenn wir also während der Suche einen binären Baum für diese 3 Werte erstellen, wird dies unnötig durchlaufen.
- In Bitmap-Strukturen wird ein zweidimensionales Array mit einer Spalte für jede Zeile der indizierten Tabelle erstellt. Jede Spalte repräsentiert einen bestimmten Wert innerhalb des Bitmap-Index. Dieses zweidimensionale Array stellt jeden Wert innerhalb des Index dar, multipliziert mit der Anzahl der Zeilen in der Tabelle.
- Zum Zeitpunkt des Zeilenabrufs dekomprimiert Oracle die Bitmap in die RAM-Datenpuffer, sodass sie schnell nach übereinstimmenden Werten durchsucht werden kann. Diese Übereinstimmungswerte werden in Form einer Row-ID-Liste an Oracle übermittelt. Diese Row-ID-Werte können direkt auf die erforderlichen Informationen zugreifen.
Funktionsbasierter Index
CREATE INDEX first_name_idx ON user_data (UPPER(first_name));
SELECT *
FROM user_data
WHERE UPPER(first_name) = 'JOHN2';
- Funktionsbasierter Index bedeutet, Index basierend auf einer Funktion zu erstellen.
- Wenn in search (where-Klausel) häufig eine Funktion verwendet wird, ist es besser, einen Index zu erstellen, der auf dieser Funktion basiert.
- In diesem Beispiel wird für die Suche die Funktion Upper () verwendet. Daher ist es besser, einen Index mit der oberen Funktion zu erstellen.
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow