SQL Server 2008 Разделение таблицы - PullRequest
0 голосов
/ 26 июля 2010

У меня огромная база данных, в которой есть несколько таблиц, содержащих несколько миллионов записей.Он содержит технические данные для клиента и постоянно растет.Это влияет на производительность даже при оптимизированной индексации.Итак, я смотрю на разбиение.

Однако я бы посмотрел на разбиение для версии, хранящейся в таблице.В наиболее упрощенном виде таблица состоит из: -

VersionID int <br> SheetID int <br> CreationDate datetime <br> SomeDate nvarchar(255) <br> Version int

И данные будут выглядеть примерно так: -

1, 1, 2010-09-01, blah, 1 <br> 2, 1, 2010-09-02, more blah, 2 <br> 3, 1, 2010-09-04, blah, 3 <br> 4, 2, 2010-09-02, more blah, 1 <br>

Для каждого нового изменения «листа» в системе в эту таблицу добавляется новая запись с новой версией.В идеале я хочу разделить таблицу так, чтобы у меня были две лучшие версии для каждого «листа».Таким образом, из таблицы выше я бы хотел версии 2 и 3 для идентификатора листа 2 и версию 1 для идентификатора листа 2, а остальные переместить в раздел.Из того, что я прочитал, это кажется невозможным.Я прав или нет?

Если я не прав, то, исходя из этого, у меня есть несколько таблиц, которые все ссылаются на эту таблицу.Они содержат различные версии введенных данных.Могу ли я разделить их на основе раздела «основной» таблицы или раздел должен быть специально основан на столбце таблицы, к которой он относится?

NB Я не самый настоящий SQLразработчик, поэтому извиняюсь, если это совершенно глупый вопрос!

1 Ответ

0 голосов
/ 26 июля 2010

Поскольку количество «нескольких миллионов записей» - разделение было бы излишним - я подозреваю, что вам лучше будет рассмотреть планы запросов с неэффективными запросами и просмотреть индексы, которые их удовлетворяют.

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

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

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

...