Um dies zu testen, muss das Experiment die Tabelle tatsächlich partitionieren. Siehe http://www.kodyaz.com/articles/how-to-partition-table-non-partitioned-table-sql-server-2008.aspx
Wenn Sie die Partitionierungsfunktion abfragen, erfahren Sie nur, was die Partitionierungsfunktion sagt. Es sagt nicht, wo die Daten gespeichert sind. Sie können eine Partitionierungsfunktion einrichten und ausführen, ohne eine Tabelle zu partitionieren, wie hier bereits gezeigt wurde.
Um die Tabelle zu partitionieren, müssen Sie auch Dateigruppen und ein Partitionierungsschema erstellen, das die Partitionierungsfunktion verwendet, um Funktionsergebnisse Dateigruppen zuzuweisen. Dann müssen Sie einen gruppierten Schlüssel in die Tabelle einfügen, der dieses Partitionsschema verwendet.
Richten Sie die Partitionierung ein
Ich bin kein Experte für Befehlszeilen-SQL. Ich habe die SSMS-Schnittstelle verwendet, um die Dateigruppen pfg1 (mit einer pf1-Datei) und pfg2 (mit einer pf2-Datei) einzurichten. Dann habe ich die Partitionierungsfunktion und das Schema deklariert:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Erstellen Sie die Tabelle und den Clustered-Index
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Wenn Sie danach sys.partitions abfragen (ich habe 2005), sehen Sie, dass die Tabelle jetzt zwei Partitionen anstelle nur einer für die Tabelle enthält. Dies zeigt an, dass die Partitionierung für diese Tabelle vollständig implementiert wurde.
select * from sys.partitions where object_id = object_id('IDRanges')
partition_id object_id index_id partition_number hobt_id Zeilen
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0
72057597780361216 770674389 1 2 72057597780361216 0
Nun, da wir zwei Partitionen haben (mit einer Zeilenanzahl für jede), können wir ein Experiment durchführen.
Fügen Sie die Zeilen ein
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Überprüfen Sie die sys.partitions, um zu sehen, was passiert ist.
select * from sys.partitions where object_id = object_id('IDRanges')
partition_id object_id index_id partition_number hobt_id Zeilen
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Ja. Eine Zeile in jeder Partition.
Eine Reihe verschieben.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Überprüfen Sie die Partitionen
select * from sys.partitions where object_id = object_id('IDRanges')
partition_id object_id index_id partition_number hobt_id Zeilen
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0
Die erste Partition hat jetzt zwei Zeilen anstelle von 1 und die zweite Partition hat null Zeilen anstelle von zwei.
Ich denke, dies bestätigt, dass die Zeile automatisch aufgrund der Änderung des gruppierten Schlüssels in einer partitionierten Tabelle verschoben wurde.