Для перевірки цього експерименту насправді потрібно розділити таблицю. Дивіться http://www.kodyaz.com/articles/how-to-partition-table-non-partified-table-sql-server-2008.aspx
Запит на функцію розділення просто повідомляє вам, що говорить функція розділення. Тут не сказано, де зберігаються дані. Ви можете налаштувати функцію розділення та запустити її, не фактично розділяючи таблицю, як це вже було показано тут.
Для того щоб розділити таблицю, ви також повинні створити групи файлів і схему розділення, яка використовує функцію розділення для призначення результатів функцій групам файлів. Тоді вам слід покласти кластерний ключ на таблицю, яка використовує цю схему розподілу.
Встановіть розділення
Я не знавець у командному рядку SQL. Я використовував інтерфейс SSMS для настройки груп файлів pfg1 (з файлом pf1) та pfg2 (з файлом pf2). Тоді я оголосив функцію та схему розподілу:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Створіть таблицю та кластерний індекс
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Після цього, коли ви запитуєте sys.partitions (у мене 2005), ви бачите, що зараз у таблиці є два розділи, а не один для таблиці. Це вказує на те, що ми повністю застосували розділення для цієї таблиці.
select * from sys.partitions where object_id = object_id('IDRanges')
partition_id object_id index_id partition_number рядки hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0
72057597780361216 770674389 1 2 72057597780361216 0
Тепер, коли у нас є два розділи (з кількістю рядків для кожного), ми можемо провести експеримент.
Вставте рядки
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Перевірте sys.partitions, щоб побачити, що сталося.
select * from sys.partitions where object_id = object_id('IDRanges')
partition_id object_id index_id partition_number рядки hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Так. По одному ряду в кожному розділі.
Перемістіть ряд.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Перевірте перегородки
select * from sys.partitions where object_id = object_id('IDRanges')
partition_id object_id index_id partition_number рядки hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0
Перший розділ тепер має два ряди замість 1, а другий розділ має нульові рядки замість двох.
Я думаю, що це підтверджує, що рядок автоматично переміщувався в результаті зміни кластерного ключа в розділеній таблиці.