mk-prg-net \ ms-sql \ tsql \ddl \index

Indizes

Indizes dienen zur Beschleunigung des Zugriffes und zur Aufrechterhaltung der Integrität. Indizes werden durch B- Bäume realisiert:

Indextypen

Gruppierte Indizes

In gruppierenden Indizes sind die Datensätze physikalisch geordnet. Die letzte Hierarchiestufe des B-Baumes sind die Seiten mit den Datensätzen selbst.

  create clustered index ixWord
on dbo.words

Folgende Bedingungen müssen bei gruppierenden Indizes beachtet werden:

Nicht gruppierte Indizes

Nicht gruppierte Indizes sind reine B- Bäume. Gegenüber gruppierten Indizes erfordern sie mehr Speicheplatz. Hingegen ist der Speicherbedarf bei der Erstellung geringer.

  create nonclustered index ixWord
on dbo.words(word)

Folgenden Bedingung müssen bei nicht gruppierenden Indizes beachtet werden:

Eindeutige Indizes

Eindeutige Indizes gehen davon aus, das keine Duplikate in den indizierten Spalten enthalten sind. Beim Durchsuchen einer Tabelle über einen solchen Index wird die Suche beim ersten Treffer abgebrochen.

  create unique index ixUser
on dbo.users(userid)

Soll verhindert werden, das in eine Spalten mit einem eindeutigen Index Duplikate eingefügt werden, muß die Option Ignore Dup Key gesetzt werden.

  create unique index ixUser
on dbo.users(userid)
with ignore_dup_key

Wird trotzdem versucht, ein Duplikat einzufügen, ignoriert SQL- Server die Anweisung. Durch dieses Verhalten wirken eindeutige Indizes wie Integritätsregeln.

Mehrspaltige Indizes

Werden in Abfragen häufig bestimmte Spaltenkombinationen verwendet, so bietet es sich an, diese zu einem mehrspaltigen Index zusammenzufassen. Wenige mehrspaltige Indizes sind effizienter als viele einspaltigen Indizes.

  create unique index ixWordFidPos
on dbo.words(file_id, pos)

Achtung: Alle Spalten zusammen in einem mehrspaltigen Index dürfen nicht breiter als 900 Byte sein

Index anlegen

  use [filesys-mko]
go
create nonclustered index ix_fnames
on files (name)
go

Index löschen

  use [filesys-mko]
go
if exists(select * form sysindexes where name='ix_fnames'
   drop index files.ix_fnames
go

Übung

  1. Auf der DMS- Datenbank wird zunächst ohne Index die Prozedur dms_search 'perl' ausgeführt. Analyse des Ausführungsplanes
  2. Gruppierenden Index auf Words.word anlegen
  3. dms_search 'perl' erneut ausführen und Ausführungsplan analysieren