Разница между не кластеризованным первичным ключом и индексом покрытия с точки зрения производительности
У меня есть таблица, которая содержит некластерный первичный ключ. Я намерен удалить этот первичный ключ и вместо этого создать уникальный индекс покрытия в том же столбце.
Тогда у таблицы будет не первичный ключ, а уникальный индекс покрытия.
Я искал в Google, но не смог найти соответствующую тему. Это в корне неправильно? или все в порядке.
Обновить:
Почему мне нужно преобразовать этот индекс в индекс покрытия?
Потому что это первичный ключ, и у меня есть много запросов выбора, основанных на этом ключе. На данный момент для каждого выбора будет необходим поиск RID, потому что это кластерный ключ NONE. Если я преобразую его в покрывающий индекс, этот поиск RID будет пропущен для этих запросов выбора, и, надеюсь, будет улучшена производительность (по крайней мере, в плане исключений говорится об этом).
Конечно, целостность также подразумевается, и поэтому я сделаю ее уникальным индексом покрытия. Первичный ключ - это уникальный идентификатор.
Что мне интересно, так это то, оказывает ли это какое-либо негативное влияние на что-либо еще.
План выполнения до:
План выполнения после:
1 ответ
Это принципиально необычно, но может быть какая-то редкая ситуация, когда все в порядке.
Вы ничего не сказали нам о причине желания сделать это, поэтому мы не можем предложить больше, чем это.
РЕДАКТИРОВАТЬ:
Согласно этой статье Кимберли Триппа, "Внешние ключи" могут ссылаться на столбцы УНИКАЛЬНОГО ИНДЕКСА, которые ВКЛЮЧАЮТ столбцы для покрытия запросов.
Для меня это означает, что, вероятно, можно заменить ваш первичный ключ уникальным индексом покрытия. Единственное негативное следствие этого, о котором я могу подумать, состоит в том, что любое приложение или запрос, который просматривает метаданные вашей таблицы, чтобы найти первичный ключ, не найдет его и может быть недостаточно умен, чтобы использовать вместо него альтернативный ключ. Например, если вы когда-либо построили куб на этой таблице, мастер представления источника данных может не создавать автоматически связь.