Составной кластерный индекс в SQL Server
У меня есть таблица со столбцом IDENTITY в качестве первичного ключа (классический столбец ID).
SQL Server автоматически создает кластеризованный индекс для этого первичного ключа.
Мой вопрос:
- Могу ли я иметь только один композит CLUSTERED INDEX с большим количеством столбцов?
Если да, как я могу удалить кластерный индекс по умолчанию и воссоздать новый с этими атрибутами.
Спасибо за вашу поддержку
1 ответ
Да, у вас может быть только один кластеризованный индекс на таблицу - данные физически упорядочены по этому индексу, поэтому вы не можете иметь более одного.
Однако я бы не советовал использовать составной кластерный индекс. Зачем? Потому что кластерный индекс всегда должен быть:
- как можно меньше - INT с 4 байтами идеально
- стабильный - никогда не меняется, так что у вас нет пульсирующих обновлений по всем вашим индексам
- уникальный - в противном случае SQL Server придется "унифицировать" ваши записи с помощью искусственных 4-байтовых значений
- оптимальным было бы: постоянно увеличиваться
INT IDENTITY идеально подходит в качестве кластерного индекса - я бы посоветовал вам сохранить его таким.
Столбец кластеризованного индекса (или набор столбцов) также добавляется к каждой записи каждого некластеризованного индекса в той же таблице - поэтому, если вы сделаете свой кластеризованный индекс большим, 20, 50 байт или более, вы начнете тратить впустую. много места - на диске и в памяти вашего сервера, что обычно снижает производительность вашей системы.
Прочитайте все о кластеризованных индексах и как они должны быть хорошими кластерными индексами здесь: