2012-06-07 3 views
0

У меня есть простая таблица с двумя колонками, первичный ключ int identity и varchar(64). Я устанавливаю уникальное ограничение/индекс в столбце VarChar, чтобы обеспечить уникальность. Обычный шаблон запроса предназначен для запроса столбца для значения, а затем используйте значение PK в соединении для поиска других данных в других таблицах.Уникальный индекс SQL Server и запрос?

Есть ли какое-либо преимущество в скорости, чтобы сделать некластеризованный индекс уникальным?

Имеет ли смысл включать столбец PK в некластеризованный индекс, или он уже существует, потому что это кластерный ПК в первую очередь?

Спасибо.

+0

Да - имеет смысл сделать уникальным некластеризованный индекс. И предполагая, что ваш первичный ключ сгруппирован - тогда нет необходимости явно включать его в некластеризованный индекс - ключ кластеризации является частью любого некластеризованного индекса уже в любом случае - всегда. –

ответ

2

Вам не нужно добавлять PK к любым некластеризованным индексам. Как вы заметили, все некластеризованные индексы уже включают PK.

И да, с уникальным ограничением повысит производительность при запросе этого индекса, поскольку оптимизатор запросов может использовать различные механизмы для поиска ваших данных, если он знает, что когда-либо будет только одно совпадение.

+2

Кроме того, наличие уникального ограничения всегда будет экономить ваше место. SQL должен иметь возможность однозначно идентифицировать каждую строку. Однако экономия пространства довольно незначительна. http://www.sqlpassion.at/blog/PermaLink,guid,4ee5bcc5-7340-4262-9fc2-73773c7f5720.aspx – Zhenny

+3

Некластеризованный индекс включает в себя ** кластерный ключ ** - не первичный ключ. Да - по умолчанию и в большинстве случаев это одно и то же - но просто ясность - это ключ кластеризации, который является частью каждого некластеризованного индекса (и это может отличаться от ПК - в редких случаях) –

+0

marc_s да вы верны, я должен был указать, что в моем вопросе. Благодарю. – Snowy

Смежные вопросы