Sind die Richtlinien für den Entwurf gruppierter Indizes angehalten, ist der Index eine gute Grundlage für die Erstellung von weiteren Indizes und so für eine schnellere Datenbank.
Entwickelt oder optimiert man eine große Datenbank, kann es passieren, dass gruppierte Indizes für eine ungünstige Spalte oder Spaltenkombination erstellt werden. Besonders teuer für Abfragen können die Tabellen mit einer PRIMARY KEY-Einschränkung sein, für die ein nicht gruppierter Index oder ein gruppierter Index für die Spalten, die nicht in die PK eingeschlossen sind, erstellt wurde. Deswegen sollte man die Tabellen genauer anschauen.
Um einen Überblick über die PRIMARY KEY-Einschränkungen mit einem nicht gruppierten Index in einer großen Datenbank zu bekommen, habe ich die folgenden zwei Abfragen geschrieben.
Abfrage 1. Bezeichnet Tabellennamen mit 1, die einen gruppierten Index besitzen
select name as TableName, objectproperty(t.object_id,'TableHasClustIndex') as HasClustIndex from sys.tables t goAbfrage 2. Bezeichnet PK-Einschränkungen mit 1, für die ein gruppierter Index erstellt wurde
select quotename(schema_name(k.schema_id)) + '.' + quotename(object_name(k.parent_object_id)) as TableName, k.name as PrimaryKey, objectproperty(k.[object_id],'CnstIsClustKey') as IsClustKey from sys.key_constraints k where k.[type] = 'PK' order by k.schema_id ,k.parent_object_id goAbfrage 3. Erstellt die PK-Einschränkung [PK_MyTable] für die Tabelle [MyTable] mit einem nicht gruppierten Index
create table dbo.MyTable ( MyTableID int identity, Column1 nvarchar(55), constraint PK_MyTable primary key nonclustered ( MyTableID ) ) go oder create table dbo.MyTable ( MyTableID int identity constraint PK_MyTable primary key nonclustered, Column1 nvarchar(55) ) goVerwandte Links:
Keine Kommentare:
Kommentar veröffentlichen