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

У меня есть таблица со Столбцом ИДЕНТИФИКАЦИОННЫХ ДАННЫХ как Первичный ключ (классический столбец ID).

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

Мой вопрос:

  • У меня может быть единственный единственный составной объект КЛАСТЕРНОГО ИНДЕКСА с большим количеством столбцов?

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

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

10
задан James A Mohler 1 December 2012 в 09:17
поделиться

1 ответ

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

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

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

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

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

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

19
ответ дан 3 December 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: