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))
В этом примере таблица переносится на другую схему секционирования, но некластерные индексы не переносятся вместе с ней. Таким образом, даже если некластерные индексы были до этого выровнены с кластерным индексом, они могут теперь оказаться невыровненными с таблицей.
Комментариев нет:
Отправить комментарий