Mamy dużą tabelę, [MyTable]
która ma obecnie zarówno a Primary Key
, jak i jedną Unique Non Clustered Index
w tej samej kolumnie ( [KeyColumn]
). Indeks U NC ma również dodatkowe kolumny zakrywające.
Posiadanie zarówno PK, jak i Unikalnego Indeksu NC w tych samych kolumnach wydaje się zbędne, dlatego rozważałem usunięcie Klucza Głównego i zamiast tego użyłem Unikatowego Nieklastrowanego indeksu do celów integralności referencyjnej.
Zauważ, że tabela jest całkowicie skupiona w innej kolumnie.
tzn. mamy:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
I
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
O ile mi wiadomo, nie można dodawać kolumn zakrywających do klucza podstawowego, więc zamierzam zrobić:
- Usuń zależne od klucza obcego ograniczenia
MyTable.KeyColumn
- Upuść
MyTable.KeyColumn
całkowicie klucz podstawowy - Ponownie dodaj klucze obce do tabeli (tzn. RI będzie wymuszone przez
MyTable.KeyColumn
)
Jedyną implikacją, jaką mogę o tym myśleć, jest to, że nie dostaniemy symbolu klucza wizualnego na naszych schematach ERD i że gęstość indeksu (liścia) będzie mniejsza z powodu uwzględnionych kolumn.
Przeczytałem /programming/487314/primary-key-or-unique-index i cieszę się z integralności i wydajności związanych z tym działań.
Moje pytanie brzmi: czy to podejście jest wadliwe?
Edytuj Co próbuję osiągnąć : Optymalizacja wydajności i Wiosenne porządki . Po usunięciu PK lub indeksu, moje indeksy będą wymagały mniej stron = szybsze zapisy, a także korzyści konserwacyjne / operacyjne, tj. Jeden mniej indeksu do defragmentacji itp.
Aby dodać trochę tła, nigdy wcześniej nie miałem tabeli, do której się odwołujemy, bez PK. Jednak fakt, że do tabeli dodano indeks NC z przykrywającymi kolumnami, oznacza, że muszę dostosować swoje myślenie.