Wir haben einen großen Tisch , [MyTable]
die derzeit sowohl eine hat Primary Key
, und eine Unique Non Clustered Index
auf der gleichen Spalte ( [KeyColumn]
). Der U NC-Index enthält außerdem zusätzliche Deckspalten.
Es scheint überflüssig, sowohl PK als auch Unique NC Index in denselben Spalten zu haben. Daher habe ich überlegt, den Primärschlüssel zu löschen und stattdessen den Unique Non Clustered Index für Zwecke der referenziellen Integrität zu verwenden.
Beachten Sie, dass die Tabelle vollständig von einer anderen Spalte geclustert wird.
Also haben wir:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
UND
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
Soweit mir bekannt ist, ist es nicht möglich, einem Primärschlüssel überdeckende Spalten hinzuzufügen. Daher beabsichtige ich Folgendes:
- Löschen Sie die Fremdschlüsseleinschränkungen, auf die Sie angewiesen sind
MyTable.KeyColumn
- Legen Sie den Primärschlüssel
MyTable.KeyColumn
vollständig auf - Fügen Sie die Fremdschlüssel erneut zur Tabelle hinzu (dh RI wird erzwungen über
MyTable.KeyColumn
).
Die einzige Implikation, die ich mir dabei vorstellen kann, ist, dass wir in unseren ERD-Diagrammen kein visuelles Schlüsselsymbol erhalten und dass die (Blatt-) Indexdichte aufgrund der enthaltenen Spalten geringer sein wird.
Ich habe /programming/487314/primary-key-or-unique-index gelesen und bin mit den Integritäts- und Leistungsaspekten dabei zufrieden.
Meine Frage ist: Ist dieser Ansatz fehlerhaft?
Bearbeiten Sie, was ich erreichen möchte : Leistungsoptimierung und Frühjahrsputz . Wenn Sie entweder den PK oder einen Index entfernen, werden weniger Seiten für meine Indizes benötigt = schnellere Schreibvorgänge, plus auch Wartungs- / Betriebsvorteile, dh ein Index weniger, um defragmentiert zu bleiben usw.
Um dies etwas näher zu erläutern: Ich hatte noch nie zuvor eine Tabelle, auf die verwiesen wird, ohne eine PK. Die Tatsache, dass der Tabelle ein NC-Index mit abdeckenden Spalten hinzugefügt wurde, bedeutet jedoch, dass ich mein Denken anpassen muss.