Если я выполняю Профилировщика, то это предлагает много индексов как этот
CREATE CLUSTERED INDEX [_dta_index_Users_c_9_292912115__K1] ON [dbo].[Users]
(
[UserId] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF) ON [PRIMARY]
UserId является первичным ключом таблицы Users. Этот индекс лучше, чем тот уже в таблице:
ALTER TABLE [dbo].[Users] ADD CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Каждой таблице нужен кластерный индекс и первичный ключ. По умолчанию PK кластеризован, но он может быть некластеризован, если вы хотите, как будто вы закончили.
Вы указали некластеризованный PK, поэтому профилировщик предлагает кластеризованный индекс ...
Примечание: таблица без кластерного индекса называется «кучей», потому что это куча неструктурированных данных ...
Да, первичный ключ всегда является индексом.
Если у вас нет другого кластерного индекса для таблицы, все просто: кластерный индекс ускоряет работу таблицы для каждой операции. ДА! Оно делает. Дополнительную информацию см. В превосходной работе Ким Триппа . Продолжение дебатов по кластерному индексу .
На самом деле, каждая полезная таблица (за исключением, может быть, промежуточных таблиц для массовой загрузки или других редких случаев) должна иметь кластерный индекс. Если у вас его нет, совершенно очевидно, что DTA порекомендует его и по умолчанию поместит в столбцы первичного ключа.
По сути, это предложение сделать первичный ключ кластеризованным индексом, а не некластеризованным. В большинстве случаев это было бы хорошо.