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

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

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

мой вопрос:

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

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

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

1 ответов


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

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

  • как можно меньше-INT с 4 байтами идеально подходит
  • стабильный-никогда не меняется, поэтому у вас нет ряби обновления через все ваши индексы
  • unique-в противном случае, SQL Сервер должен "uniquify" записи с исскуственный 4-байтовых значений
  • оптимальным будет: ever increasing

int IDENTITY идеально подходит как кластеризованный индекс - Я бы посоветовал вам сохранить его таким образом.

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

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