Aby to przetestować, eksperyment faktycznie musi podzielić tabelę. Zobacz http://www.kodyaz.com/articles/how-to-partition-table-non-partitioned-table-sql-server-2008.aspx
Zapytanie o funkcję partycjonowania mówi ci tylko, co mówi funkcja partycjonowania. Nie mówi, gdzie są przechowywane dane. Możesz skonfigurować funkcję partycjonowania i uruchomić ją bez partycjonowania tabeli, jak już tutaj pokazano.
Aby podzielić tabelę na partycje, musisz także utworzyć grupy plików i schemat partycjonowania, który używa funkcji partycjonowania do przypisywania wyników funkcji do grup plików. Następnie musisz umieścić klucz klastrowany w tabeli korzystającej z tego schematu partycjonowania.
Skonfiguruj partycjonowanie
Nie jestem ekspertem od SQL wiersza poleceń. Użyłem interfejsu SSMS, aby skonfigurować grupy plików pfg1 (z plikiem pf1) i pfg2 (z plikiem pf2). Następnie zadeklarowałem funkcję i schemat partycjonowania:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Utwórz tabelę i indeks klastrowany
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Gdy to zrobisz, po zapytaniu o sys.partitions (mam 2005), zobaczysz, że tabela ma teraz dwie partycje zamiast tylko jednej dla tabeli. Oznacza to, że w pełni zaimplementowaliśmy partycjonowanie dla tej tabeli.
select * from sys.partitions where object_id = object_id('IDRanges')
identyfikator_partycji identyfikator_obiektu identyfikator_indeksu numer_partycji identyfikator_oboju wiersze
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0
72057597780361216 770674389 1 2 72057597780361216 0
Teraz, gdy mamy dwie partycje (z liczbą wierszy dla każdej), możemy przeprowadzić eksperyment.
Wstaw rzędy
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Sprawdź sys.partitions, aby zobaczyć, co się stało.
select * from sys.partitions where object_id = object_id('IDRanges')
identyfikator_partycji identyfikator_obiektu identyfikator_indeksu numer_partycji identyfikator_oboju wiersze
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Tak. Jeden rząd w każdej partycji.
Przenieś rząd.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Sprawdź partycje
select * from sys.partitions where object_id = object_id('IDRanges')
identyfikator_partycji identyfikator_obiektu identyfikator_indeksu numer_partycji identyfikator_oboju wiersze
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0
Pierwsza partycja ma teraz dwa wiersze zamiast 1, a druga partycja ma zero wierszy zamiast dwóch.
Myślę, że to potwierdza, że wiersz został automatycznie przeniesiony w wyniku modyfikacji klucza klastrowego w tabeli podzielonej na partycje.