Путаница: почему SSMS создает кластерный индекс по умолчанию для первичного ключа с идентификатором

Я только что выполнил следующий скрипт

CREATE TABLE Test
(
    ID INT IDENTITY PRIMARY KEY,
    Info nvarchar(50)
)

К моему удивлению, SSMS создала кластерный индекс для столбца ID. Итак, мой вопрос, почему не некластеризованный индекс?

Насколько я понимаю, было бы лучше использовать в этом случае некластеризованный индекс, потому что из-за бинарного дерева гораздо быстрее искать идентификатор со значением X вместо использования кластерного индекса, где значения как-то сгруппированы. Кроме того, если я думаю о получении данных, необходимо как-то быстро получить доступ к идентификатору. Как и во многих написанных статьях, двоичное дерево - это быстрый способ получения определенного или нескольких идентификаторов. В дополнение к этому, в большинстве случаев я вижу, что первичный ключ любой таблицы является идентификатором со значением автоинкремента. Таким образом, довольно распространено использовать этот подход принципа автоинкрементации.

Итак, в чем преимущество использования некластеризованного ключа и почему это по умолчанию в SSMS?

1 ответ

Решение

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

CREATE TABLE Test
(
    ID INT IDENTITY PRIMARY KEY NONCLUSTERED,
    Info nvarchar(50)
)

но особенно в INT IDENTITY В этом случае это почти идеальный кластеризованный индекс, который вы можете себе представить в своей таблице - так что "хорошо", что SQL Server делает этот выбор по умолчанию.

Каждая "серьезная" таблица в SQL Server должна иметь правильно выбранный кластеризованный индекс (потому что альтернатива - куча - медленнее и более громоздкая для точной настройки во всех отношениях) - и небольшая (4 байта) статическая (никогда не меняется)), уникальный столбец, как INT IDENTITY идеально подходит в качестве кластеризованного индекса в этой таблице.

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

Другие вопросы по тегам