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:
- Es kann nur ein einziger gruppierter Index für eine Tabelle angelegt werden
- Die indizierten Spalten sollten eindeutig sein- nicht eindeutige Spalten werden intern mit einem versteckten Schlüüsel vom SQL- Server ergänzt, um eindeutigkeit wiederherszustellen – Durch Spalten mit Duplikaten erhöht sich damit unnötigerweise der Speicherplatz.
- Bei der Indexerstelung müssen mind. 120% der Tabellengröße vorhanden sein
- Nach der Indexerstellung ist der Speicherbedarf um etwa 5% der ursrpünglichen Größe angewachsen
- Der Schlüsselwert aus einem gruppierten Index wird in nicht gruppierten Indizes mitgeführt-> Große Schlüsselwerte aus gruppierenden Indizes führen zu Speicheintensiven nicht gruppierenden Indizes
- Gruppierende Indizes sollten, falls benötigt, als erste eingerichtet 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:
- Es können bis zu 249 n.g. Indizes für eine Tabelle erstellt 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
- Auf der DMS- Datenbank wird zunächst ohne Index die Prozedur dms_search 'perl' ausgeführt. Analyse des Ausführungsplanes
- Gruppierenden Index auf Words.word anlegen
- dms_search 'perl' erneut ausführen und Ausführungsplan analysieren