Разбиение однораздельной таблицы в SQL Server 2008 - PullRequest
1 голос
/ 27 мая 2011


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

CREATE TABLE [dbo].[my_table](
[id] [int] IDENTITY(1,1) NOT NULL,
[external_id] [int] NOT NULL,
[amount] [money] NOT NULL,
    PRIMARY KEY CLUSTERED ([id] ASC));

Всего несколько external_id и тысячи записей для каждой из них.
SSMS Create Partition Wizard генерирует скрипт, который я до конца не понимаю. После создания функции раздела и схемы раздела,
- это падает первичный ключ,
- затем снова создает Первичный ключ на id, на этот раз как некластеризованный,
--then создает кластеризованный индекс в external_id для вновь созданной схемы секционирования,
- и, наконец, удаляет кластерный индекс, созданный на предыдущем шаге.

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

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 27 мая 2011

Это имеет смысл.

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

Он сохраняет первичный ключ в некластеризованном индексе -поскольку он имеет идентификатор, а не external_id

Он создал кластеризованный индекс для external_id для физического перемещения данных в схему секционирования.

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

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

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

...