next Datenintengrität
up Fundamentals
previous Tabellen
  Contents   Index

Subsections


Indizes

Ein Index ist eine Baumstruktur, die einen direkten Zugriff auf ein Datensatz einer Tabelle ermöglicht. Indizes solten immer in einem separaten Tablespace gespeichert werden, der auf einer separaten Platte liegen sollte.

Arten


Logisch


Physikalisch

Eingehender wird hier auf den B-Tree- und Bitmap-Index eingegangen.


B-Tree


Normal:
Der normale B-Tree wird am meisten verwendet und wird nachfolgend eingehender behandelt.

Reverse Key Index:
Beim Erzeugen eines Reverse Key Index wird der Wert in der Key-Spalte 'umgedreht'.
12345 --> 54321
12346 --> 64321
12347 --> 74321
Der Reverse Key Index wird sehr selten verwendet. Meist um bei Sequenzen mit kontinuierlich folgenden Werten ein Verteilen auf unterschiedliche Blöcke zu erreichen.

Beachte: Wenn Applikationen Wertebereiche festlegen, kann der Reverse Key Index nicht verwendet werden.


Bitmap


Index erstellen

Empfehlungen

B-Tree

Normal

create index id_dual on dual (dummy)
  tablespace testus;
Der B-Tree ist der Default Index und braucht daher nicht angegeben zu werden.
CREATE INDEX scott.emp_lname_idx
  ON scott.employees(last_name)
  PCTFREE 30
  STORAGE(INITIAL 200K NEXT 200K
  PCTINCREASE 0
  MAXEXTENTS 50)
  TABLESPACE indx01
;

Reverse Key Index

CREATE UNIQUE INDEX scott.ord_ord_no_idx
  ON scott.ord(ord_no) REVERSE
  PCTFREE 30
  STORAGE(INITIAL 200K NEXT 200K
  PCTINCREASE 0
  MAXEXTENTS 50)
  TABLESPACE indx01
;


Erstellen eines Funktionsindex:

Ein Funktionsindex beinhaltet eine Funktion. Oft ist dies lower(), um Groß- und Kleinschreibung zu ignorieren.

Achtung: Query Rewrite muss vorher gegeben worden sein.

CREATE INDEX scott.funct_ind1
  ON scott.emp(lower(ename))
  PCTFREE 30
  STORAGE(INITIAL 200K NEXT 200K
  PCTINCREASE 0
  MAXEXTENTS 50)
  TABLESPACE indx01
;


Bitmap

Beispiel mit Storage Parametern.
create bitmap index id_dual
  on dual (dummy)
  pctfree 30 storage(initial 200k next 200k pctincrease 0 maxextents 50)
  tablespace testus
;
Diese Werte (initial, next, pctincrease, maxextents) werden in diesem Beispiel ignoriert, da der Tablespace testus als Local Managed definiert wurde.


Ändern der Storage Parameter eines Index

Die zu ändernden Parameter sind die gleichen wie bei Tabellen. Meist wird MAXEXTENTS erhöht.
alter index id_dual storage(next 400k maxextents 100);
FEHLER in Zeile 1:
ORA-25150: ÄNDERN von Extent-Parametern nicht zulässig
Dies geht nicht, da der Tablespace hier Local Managed ist.


Index verschieben

Dies ist nicht sehr zu empfehlen, da es sehr lange dauert.
alter index id_dual rebuild tablespace testus;


Index reorganisieren


REBUILD - Reorganisieren Online

REBUILD ONLINE dient zur staleness Korrektur von Index. REBUILD ONLINE ist sehr zeitaufwendig. Umfangreiche DML-Operationen sind dabei nicht zu empfehlen. DDL-Operationen werden für diese Zeit gesperrt. Restriktionen:
alter index id_dual rebuild online;
FEHLER in Zeile 1:
ORA-08108: 
Dieser Index-Typ kann nicht online erstellt oder neu erstellt werden.
Zu klein?


COALESCE - Index-Zusammenführung

Um den Index neu zu organisieren kann bei B-Tree-Index COALESCE angewendet werden. Dabei können Abfragen von Usern, die den Index verwendet, ausgeführt werden. Wird laut Dozent kaum verwendet (ausser in der Prüfung). Besser ist hier Rebuild Online.
alter index id_dual coalesce;


Index logisch überprüfen

ANALYZE erzeugt die View index_stats, die dann abgefragt werden kann.
analyze index id_dual validate structure;
select name, blocks, pct_used, distinct_keys lf_rows, del_lf_rows
  from index_stats
;
NAME         BLOCKS  PCT_USED  LF_ROWS  DEL_LF_ROWS
---------------------------------------------------
ID_DUAL          32         1        1            0
Wenn viele gelöschte Leafs (DEL_LF_ROWS >10%) angezeigt werden, sollte neu organisiert werden.


Statistiken über die Nutzung des Index

Ab Oracle9i können Statistiken über die Nutzung eines Index erzeugt werden. Diese werden in V$OBJECT_USAGE angezeigt. Nicht genutzte Indizes können so erkannt und gelöscht werden.

Monitoring starten

alter index hr.dept_id_idx monitoring usage;
Monitoring stoppen
alter index hr.dept_id_idx nomonitoring usage;


Informationen über Indizes


Index löschen

Bevor man große Datenmengen importieren will, sollte man den Index löschen und nach dem Import neu erstellen. Dies geht schneller. Automatisch erstellte Indizes können erst nach dem Deaktivieren der entsprechenden Constraints gelöscht werden.

Löschen Sie Indizes, die selten gebraucht werden und erstellen Sie diese kurz vor Gebrauch.

drop index id_dual;


Views


USER_INDEXES

Infos über Indizes


USER_IND_COLUMNS

Infos über die Spalten

Übung Index

Übungen siehe Seite [*].
next Datenintengrität
up Fundamentals
previous Tabellen
  Contents   Index


Stefan Hietel dama.go GmbH, Robert Warnke http://rowa.giso.de