Подтвердить что ты не робот

Хороший/не имеет значения/плохо, чтобы включить первичный ключ в индекс покрытия?

есть good или doesn't matter или bad, чтобы включить первичный ключ в индекс покрытия

CREATE NONCLUSTERED INDEX index_name_here ON dbo.table_name_here
(column_to_index_here) 
INCLUDE (primary_key_column,other_column_here)
WITH( STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF, --<default junk from SSMS
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

Я думаю, что это не имеет значения, так как ПК всегда будет в индексе.

ИЗМЕНИТЬ - уточнить.
my primary_key_column сгруппирован, но вы можете объяснить/дать информацию, когда это не так.

Я присоединяюсь к dbo.table_name_here в столбце column_to_index_here и затем присоединяюсь к другим таблицам в primary_key_column и other_column_here.

4b9b3361

Ответ 1

Если вы кластеризуете свой ПК, то не имеет значения. SQL Server игнорирует его, поскольку все некластеризованные индексы содержат кластерный индексный ключ для этой строки как часть их определения.

Он не будет использовать лишнее место в индексе, но он избыточен, чтобы включить его в определение.

Если ваш ПК не включен в ваш кластерный индекс, включите его только в том случае, если вам нужно будет извлечь это поле в качестве части того же запроса, который использует индекс.

Также помните, когда вы INCLUDE поле в индексе, оно НЕ в нелистных узлах, то есть индекс не сортируется по этому значению.

Ответ 2

поскольку PK будет в индексе в любом случае.

Предполагая, что вы имеете в виду, что PK находится в другом индексе с этим утверждением, независимо от того, включаете ли вы первичный ключ в этот индекс, зависит от того, будете ли вы выбирать его в своих запросах. Если вы собираетесь его выбрать, включите его в индекс, если нет, оставьте его. Также для таблицы, кластерной на ПК, см. Ответ @JNK.

Ответ 3

Включите его только в том случае, если вам действительно нужно "покрыть" запрос, иначе вы просто теряете пространство. Весь смысл индекса покрытия заключается в том, что вы исключаете необходимость поиска по закладкам в базовой таблице, поэтому для первичного ключа в этом нет необходимости.