У нас є велика таблиця, в [MyTable]
якій зараз є і a Primary Key
, і a Unique Non Clustered Index
в тому ж стовпці ( [KeyColumn]
). Індекс U NC також має додаткові покривні колони.
Наявність як ПК, так і унікального індексу NC в одних стовпцях видається зайвим, тому я розглядав питання про видалення первинного ключа і замість цього використовував унікальний індекс, не кластеризований для цілей референтної цілісності.
Зауважте, що таблиця повністю кластеризована іншим стовпцем.
тобто у нас є:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
І
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
Наскільки я знаю, не можна додати стовпці покриття до первинного ключа, тому я маю намір зробити:
- Скасувати обмеження зовнішніх ключів, на які покладається
MyTable.KeyColumn
- Закрийте первинний ключ
MyTable.KeyColumn
повністю - Повторно додайте в таблицю іноземні ключі (тобто RI буде застосовано через
MyTable.KeyColumn
)
Єдине значення, яке я можу зробити, це зробити те, що ми не отримаємо символ візуального ключа на наших ERD-діаграмах, і що (лист) щільність індексу буде меншою із-за включених стовпців.
Я прочитав /programming/487314/primary-key-or-unique-index і задоволений аспектами доброчесності та продуктивності.
Моє запитання: Чи є такий підхід хибним?
Редагувати те, що я намагаюся досягти : Оптимізація продуктивності та весняне прибирання . Видаляючи або ПК або індекс, буде менше сторінок, необхідних для моїх індексів = швидше записує, плюс також корисні для обслуговування / експлуатації переваги, тобто один менший індекс для збереження дефрагментів тощо.
Якщо говорити про це, я ніколи раніше не мав таблиці, на яку посилався, без ПК. Однак той факт, що до таблиці було додано індекс NC із стовпцями, що охоплює, означає, що мені потрібно адаптувати своє мислення.