16.1.23

Запоздалое вступление - Типы построения индексов - Часть 2 (секционированные индексы)

http://blogs.technet.com/lyudmila_fokina/archive/2006/11/21/524236.aspx

Людмила Фокина

-         Построение секционированных или построение несекционированных индексов:

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

Выровненные секционированные индексы:

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

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

1) аргументы функции секционирования должны иметь один и тот же тип данных,

2) функции должны определять одинаковое количество секций и

3) функции должны определять для секций одинаковые граничные значения.

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

Пример:

Create Partition Function pf (int)

as range right for values (NULL,  1,  100)

Create Partition Scheme ps

as Partition pf

TO ([PRIMARY], [FileGroup1], [FileGroup1], [FileGroup1])

Create table t (c1 int, c2 int)

on ps(c1)

Create Index idx_t on t(c1)

Невыровненные секционированные индексы:

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

Вы можете превратить несекционированную таблицу в секционированную построив на ней секционированный кластерный индекс – это также будет невыровненное построение индекса (см. пример).

Пример:

Create Partition Function pf (int)

as range right for values (NULL,  1,  100)

Create Partition Scheme ps

as Partition pf

TO ([PRIMARY], [FileGroup1], [FileGroup1], [FileGroup1])

Create table t (c1 int, c2 int)      

Create clustered Index idx_t on t(c1)

on ps(c1)

Замечание: Если имеется секционированный кластерный индекс (пример выше) и вы его удаляете, то таблица останется секционированной в соответствии с той же схемой секционирования. Исключение составляет случай, когда вы указываете опцию MOVE TO во время удаления индекса.

Пример:

Drop Index idx_t on t

WITH(MOVE TO new_ps(c1))

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

Комментариев нет:

Отправить комментарий