Ein Index ist ein Datenbankobjekt, das durch Nutzung einer effektiven Speicherstruktur den Abruf von Zeilen beschleunigen kann.
Indizes können vom Benutzer explizit (CREATE INDEX) oder bei der Definition eines PRIMARY KEY- bzw. UNIQUE KEY-Constraints automatisch erstellt werden.
Erstellen eines Index
Die allgemeine Syntax lautet:
CREATE [UNIQUE] INDEX <index_name>
ON <tabellen_name> (<spalten_liste>]
[TABLESPACE <index_tbs>];
wobei:
Beispiele:
CREATE UNIQUE INDEX emp_ename_idx
ON scott.emp(ename)
TABLESPACE indx;
Im zweiten Beispiel werden beim Anlegen der Tabelle test automatisch Indizes auf die Spalten col1 und col2 gelegt.
CREATE TABLE test (
col1 number(3) primary key,
col2 varchar2(15) unique);
Richtlinien zur Indexerstellung
Unter folgenden Voraussetzungen erscheint eine Indizierung sinnvoll:
Funktionsbasierter Index
Enthält die WHERE-Klausel statt der Spalte eine Funktion auf die Spalte, wird ein normaler Index nicht verwendet. Ab Version 8i gibt es die Möglichkeit einen sog. funktionsbasierten Index zu erstellen, der dann für die angegebene Funktion wirksam wird.
Der oben erstellte Index emp_ename_idx wird bei folgender Abfrage nicht verwendet:
SELECT ename, empno, sal
FROM emp
WHERE UPPER(ename) = 'KING';
Um dieses Problem zu umgehen, erstellt man einen entsprechenden funktionsbasierten Index:
CREATE INDEX emp_upper_idx
ON scott.emp(UPPER(ename));
Hinweis: Bis zur Version 9.2 müssen folgende Voraussetzungen gegeben sein damit ein funktionsbasierter Index erstellt werden kann.
Der Parameter QUERY_REWRITE_ENABLED muss auf TRUE gesetzt sein.
Der Benutzer brauch das Recht QUERY REWRITE.
Löschen eines Index
Manuell erzeugte Indizes können durch folgende allgemeine Syntax entfernt werden:
DROP INDEX <index_name>;
Indizes, die beim Anlegen eines PRIMARY KEY- oder UNIQUE KEY-Constraints automatisch erstellt worden sind, können nur durch Ausschalten oder Löschen des jeweiligen Constraints entfernt werden.
Data Dictionary-Views
Alle Informationen zu den Indizes eines Benutzers lassen sich über die DD-Views
anzeigen.
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.