Итак, позвольте мне предисловие, сказав, что я не имею полного контроля над моим дизайном БД, поэтому многие аспекты текущей системы не могут быть изменены для целей этого сценария.
Комментарии о том, как мы должны переосмыслить аспекты дизайна, скорее всего правильные, но бесполезные :)
У меня очень большая таблица, около 150 полей в ширину и около 600 м строк, которая управляет большим количеством процессов. Это в ситуации с хранилищем данных, поэтому у нас нет ЛЮБЫХ обновлений / вставок вне запланированного процесса загрузки, поэтому он сильно проиндексирован.
Было принято решение попробовать секционировать эту таблицу, и у меня есть некоторые опасения по поводу индексации секционированной таблицы. У меня нет опыта работы с разделами, поэтому любые отзывы и ссылки приветствуются. Я не мог найти конкретно, что я после на BOL или MSDN.
В настоящее время мы группируем поле, которое мы будем называть, IncidentKey
которое является varchar(50)
уникальным и может иметь от 1 до 100 записей IK
(без комментариев, пожалуйста). Мы часто получаем новые данные о старых IncidentKey
записях, поэтому они также не являются последовательными.
Я понимаю, что IncidentDate
для правильной работы раздела необходимо включить поле раздела в ключ кластеризованного индекса. Я думаю, что это будет IncidentKey, IncidentDate
.
Вопрос в том, как будет работать механизм кластерного индекса для ключа из 2 частей в многораздельной таблице, если запись в «новом» разделе должна быть перед записью в «старом» разделе в кластерном индексе?
Например, у меня есть 5 записей:
IncidentKey Date
ABC123 1/1/2010
ABC123 7/1/2010
ABC123 1/1/2011
XYZ999 1/1/2010
XYZ999 7/1/2010
Если я получу новую запись для ABC123, 2/1/2011
него, необходимо будет в кластеризованном индексе ДО XYZ999, 1/1/2010
. Как это работает?
Я предполагаю фрагментацию и указатели, но я не могу найти никакой информации о физическом хранении и конфигурации однораздельных кластерных индексов для многораздельных таблиц с ключами из двух частей.