Chúng tôi có một bảng lớn [MyTable]
mà hiện nay có cả Primary Key
, và một Unique Non Clustered Index
trên cùng một cột ( [KeyColumn]
). Chỉ số U NC cũng có các cột che bổ sung.
Có cả PK và Chỉ số NC duy nhất trên cùng một cột có vẻ dư thừa, vì vậy tôi đã xem xét xóa Khóa chính và thay vào đó sử dụng chỉ mục Không phân cụm duy nhất cho mục đích toàn vẹn tham chiếu.
Lưu ý rằng bảng được nhóm hoàn toàn bởi một cột khác.
tức là chúng ta có:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
VÀ
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
Theo như tôi biết, không thể thêm các cột che vào Khóa chính, vì vậy tôi dự định sẽ làm:
- Bỏ các ràng buộc khóa ngoại dựa vào
MyTable.KeyColumn
- Bỏ khóa chính
MyTable.KeyColumn
hoàn toàn - Thêm lại các khóa ngoại vào bảng (tức là RI sẽ được thực thi thông qua
MyTable.KeyColumn
)
Hàm ý duy nhất tôi có thể nghĩ đến khi làm điều này là chúng ta sẽ không nhận được biểu tượng khóa trực quan trên sơ đồ ERD của mình và mật độ chỉ số (lá) sẽ ít hơn do các cột được bao gồm.
Tôi đã đọc /programming/487314/primary-key-or-unique-index và hài lòng với tính toàn vẹn và hiệu suất của việc này.
Câu hỏi của tôi là: Cách tiếp cận này có thiếu sót?
Chỉnh sửa những gì tôi đang cố gắng thực hiện : Tối ưu hóa hiệu suất và làm sạch mùa xuân . Bằng cách xóa PK hoặc Chỉ mục, sẽ có ít trang cần thiết hơn cho chỉ mục của tôi = ghi nhanh hơn, cộng với lợi ích bảo trì / vận hành, tức là chỉ số ít hơn để giữ phân mảnh, v.v.
Để đặt một số nền tảng cho điều này, trước đây tôi chưa bao giờ có một bảng được tham chiếu, không có PK. Tuy nhiên, thực tế là một Chỉ số NC với các cột che được thêm vào bảng có nghĩa là tôi cần điều chỉnh suy nghĩ của mình.