2014-04-18 1 views
1

У меня есть первичный ключ, как часть моей таблицы определяются следующим образом:делает основной кластеризованный ключ по умолчанию по возрастанию?

PRIMARY KEY CLUSTERED ([c_number], [property]) 

ли база данных затем сохранить таблицу сортируется в порядке возрастания c_number по умолчанию? Можно ли установить осветитель ASC в заявлении, чтобы убедиться в этом?

Это развертывается в базе данных Microsoft Azure SQL.

+1

Это конкретный дБ. SQL - язык запросов, он ничего не поддерживает. –

+0

Извините, вы правы. Терминология/понимание mixup – gnychis

+0

добавили его в сообщение сейчас – gnychis

ответ

1

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

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

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

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

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

Ваш индекс указана c_number, property, что означает, что индекс будет упорядочен по возрастанию c_number, а затем по значению по возрастанию, что означает, что данные также будут сохранены таким образом. Как страница данных заполняется, если вы должны были выполнить вставки в следующем порядке:

(1,1) (1,2) (2,1) (1,3)

You приведет к фрагментации, поскольку страницу нужно будет разбить, чтобы вставить значение (1,3) между (1,2) и (2,1).

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

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

+0

Я думаю, я спросил, поддерживает ли база данных таблицу, отсортированную по возрастанию, как я указываю свой первичный ключ. Не будет ли запрос возвращен заказанным. – gnychis

+0

Он хранит данные, отсортированные по кластерному индексу, независимо от первичного ключа. Поскольку вы указали, что ваш первичный ключ также кластеризован, таким образом данные будут логически отсортированы на страницах данных. – dodexahedron

Смежные вопросы