Составной кластерный индекс в SQL Server

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

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

Мой вопрос:

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

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

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

1 ответ

Решение

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

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

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

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

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

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

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