Составной кластерный индекс в SQL Server - PullRequest
10 голосов
/ 08 июля 2010

У меня есть таблица со столбцом IDENTITY в качестве первичного ключа (классический столбец ID).

SQL Server автоматически создает кластеризованный индекс для этого первичного ключа.

Мой вопрос:

  • Могу ли я иметь только один композитный индекс CLUSTERED INDEX с большим количеством столбцов?

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

Спасибо за вашу поддержку

1 Ответ

18 голосов
/ 08 июля 2010

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

Однако я бы не советовал использовать составной кластерный индекс,Зачем?Поскольку кластеризованный индекс всегда должен быть:

  • настолько малым, насколько это возможно - INT с 4 байтами идеален
  • стабильный - никогда не меняйте, поэтому у вас не будет повторяющихся обновлений через все вашииндексы
  • уникальны - в противном случае SQL Server придется "унифицировать" ваши записи с помощью искусственных 4-байтовых значений
  • оптимально будет: когда-либо увеличиваться

INT IDENTITYидеально подходит в качестве кластеризованного индекса - я бы посоветовал вам сохранить его таким образом.

Столбец кластеризованного индекса (или набор столбцов) также добавляется к каждой записи каждого некластеризованного индекса в той же таблице.- поэтому, если вы сделаете свой кластеризованный индекс большим, 20, 50 байт или более, вы начнете тратить много места - на диске и в памяти вашего сервера, что в целом снижает производительность вашей системы.

Читать всео кластеризованных индексах и о том, какими они должны быть, чтобы быть хорошими кластерными индексами здесь:

...