Kami memiliki tabel besar [MyTable]
yang saat ini memiliki a Primary Key
, dan a Unique Non Clustered Index
pada kolom yang sama ( [KeyColumn]
). Indeks U NC juga memiliki kolom penutup tambahan.
Memiliki kedua PK dan Indeks NC Unik pada kolom yang sama tampaknya berlebihan, jadi saya sedang mempertimbangkan menghapus Kunci Utama dan sebagai gantinya menggunakan indeks Unik Non Clustered untuk keperluan Integritas Referensial.
Perhatikan bahwa tabel dikelompokkan oleh kolom lain seluruhnya.
Yaitu Jadi kita memiliki:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
DAN
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
Sejauh yang saya tahu, tidak mungkin menambahkan kolom penutup ke Kunci Utama, jadi saya bermaksud untuk melakukan:
- Jatuhkan Batasan Kunci Asing bergantung pada
MyTable.KeyColumn
- Jatuhkan Kunci Utama
MyTable.KeyColumn
sepenuhnya - Tambahkan kembali kunci asing ke tabel (yaitu RI akan diberlakukan melalui
MyTable.KeyColumn
)
Satu-satunya implikasi yang dapat saya pikirkan untuk melakukan ini adalah bahwa kita tidak akan mendapatkan simbol kunci visual pada diagram ERD kita, dan bahwa kepadatan indeks (daun) akan lebih sedikit karena kolom yang disertakan.
Saya telah membaca /programming/487314/primary-key-or-unique-index dan saya senang dengan aspek integritas dan kinerja dalam melakukan ini.
Pertanyaan saya adalah: Apakah pendekatan ini cacat?
Edit Apa yang saya coba capai : Optimasi Kinerja dan Pembersihan Musim Semi . Dengan menghapus baik PK atau Indeks, akan ada lebih sedikit halaman yang dibutuhkan untuk indeks saya = menulis lebih cepat, ditambah juga manfaat pemeliharaan / operasional, yaitu satu indeks lebih sedikit untuk terus defrag dll.
Untuk menjelaskan hal ini, saya belum pernah punya meja yang direferensikan, tanpa PK. Namun, fakta bahwa Indeks NC dengan kolom penutup ditambahkan ke tabel berarti bahwa saya perlu menyesuaikan pemikiran saya.