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
go
Abfrage 2. Bezeichnet PK-Einschränkungen mit 1, für die ein gruppierter Index erstellt wurdeselect
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
go
Abfrage 3. Erstellt die PK-Einschränkung [PK_MyTable] für die Tabelle [MyTable] mit einem nicht gruppierten Indexcreate 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)
)
go
Verwandte Links:
Keine Kommentare:
Kommentar veröffentlichen