Составной кластеризованный индекс в SQL Server
У меня есть таблица с столбцом идентификатора в качестве первичного ключа (классический столбец идентификатора).
SQL Server автоматически создает кластеризованный индекс для этого первичного ключа.
мой вопрос:
- могу ли я иметь только один кластеризованный индекс с большим количеством столбцов?
Если да, то как я могу удалить кластеризованный индекс по умолчанию и воссоздать новый с этими атрибутами.
Спасибо за поддержку
1 ответов
Да, вы можете иметь только один кластеризованный индекс на таблицу - данные физически расположены по этому индексу, поэтому вы не можете иметь более одного.
однако я бы не советовал использовать составной кластеризованный индекс. Почему? Потому что кластеризованный индекс всегда должен быть:
- как можно меньше-INT с 4 байтами идеально подходит
- стабильный-никогда не меняется, поэтому у вас нет ряби обновления через все ваши индексы
- unique-в противном случае, SQL Сервер должен "uniquify" записи с исскуственный 4-байтовых значений
- оптимальным будет: ever increasing
int IDENTITY идеально подходит как кластеризованный индекс - Я бы посоветовал вам сохранить его таким образом.
столбец кластеризованного индекса (или набор столбцов) также добавляется к каждой записи каждого некластеризованного индекса в той же таблице , поэтому, если вы сделаете свой кластеризованный индекс большим, 20, 50 байтов или более, вы начнете тратить много места - на диске и в памяти вашего сервера, что обычно снижает производительность вашей системы.
Читайте все о кластеризованных индексах и какими они должны быть, чтобы быть хорошими кластеризованными индексами здесь: