PRIMARY KEY-Einschränkungen mit einem NONCLUSTERED INDEX finden
In der Regel verfügt eine Tabelle über PRIMARY KEY-Einschränkung, für die ein gruppierter Index standardmäßig erstellt wird. Man kann auch eine PK-Einschränkung mit einem nicht gruppierten Index erstellen. Als ein Beispiel dafür siehe Abfrage 3.
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 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
go
Abfrage 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)
)
go
Verwandte Links:
| Print article | This entry was posted by Yury Iwtschenko on 26.05.11 at 00:04:00 . Follow any responses to this post through RSS 2.0. |

