Если вы создали первичный ключ, как:
CREATE TABLE TBL (UserID, SomeTypeID, SomeSubType, Data
CONSTRAINT PK PRIMARY KEY (UserID, SomeTypeID, SomeSubType))
Тогда индекс по умолчанию, который создается является CLUSTERED
индекс.
Обычно (так не всегда), при поиске данных, которые вы хотели бы ваши запросы использовать NON-CLUSTERED
индекс для фильтрации строк, где столбцы, которые вы используете для фильтрации строк будут формировать ключ индекса и информация (колонка), что вы вернетесь из этих строк как INCLUDED
столбца, в данном случае DATA
, как показано ниже:
CREATE NONCLUSTERED INDEX ncl_indx
ON TBL (UserID, SomeTypeID, SomeSubType) INCLUDE (Data);
делая это, вы избегаете доступа к данным таблицы, с помощью индекса CLUSTERED
.
Но, вы можете указать тип индекса, который вы хотите, чтобы ваш PRIMARY KEY
быть, так:
CREATE TABLE TBL (UserID, SomeTypeID, SomeSubType, Data
CONSTRAINT PK PRIMARY KEY NONCLUSTERED (UserID, SomeTypeID, SomeSubType));
Buuut, потому что вы хотите, чтобы он был определен как PRIMARY KEY
то вы не в состоянии использовать функциональность INCLUDE
, поэтому вы не можете избежать поиска диска, чтобы получить информацию из столбца DATA
, где вы в основном используете индекс по умолчанию CLUSTERED
.
Buuuuuut, есть еще способ гарантировать уникальность, что первичный ключ дает вам и выгоду от INCLUDE
функциональности, чтобы сделать, как меньшее количество дисковых операций ввода Выходов /.
Вы можете указать NONCLUSTERED INDEX
как UNIQUE
, который гарантирует, что все ваши 3 столбца, составляющие индексный ключ, уникальны.
CREATE UNIQUE NONCLUSTERED INDEX ncl_indx
ON TBL (UserID, SomeTypeID, SomeSubType) INCLUDE (Data);
Делая все это, то ваша таблица будет HEAP
, which is not a very good thing. Если вы хорошо подумали о разработке своих таблиц и решили, что лучший кластеризованный ключ для вашего CLUSTERED INDEX
(UserID, SomeTypeID, SomeSubType), тогда лучше оставить все, как у вас в настоящее время.
В противном случае, если вы решили использовать другой ключ кластеризации, вы можете добавить этот уникальный некластеризованный индекс, если вы собираетесь запрашивать таблицу, как вы сказали.
Первичный ключ уже создает индекс сортировки. Если вы не хотите запрашивать другие столбцы, изолированные друг от друга, должно быть хорошо использовать только первичный ключ. Подробнее: https://msdn.microsoft.com/en-us/library/ms189039.aspx (при условии, что вы используете Microsoft SQL) –
Возможный дубликат ... http://stackoverflow.com/questions/462477/sql-primary -key-и-индекс? RQ = 1 –