Per verificarlo, l'esperimento deve effettivamente partizionare la tabella. Vedi http://www.kodyaz.com/articles/how-to-partition-table-non-partitioned-table-sql-server-2008.aspx
L'interrogazione della funzione di partizionamento indica semplicemente cosa dice la funzione di partizionamento. Non dice dove sono archiviati i dati. È possibile impostare una funzione di partizionamento ed eseguirla senza effettivamente partizionare una tabella, come è già stato dimostrato qui.
Per partizionare la tabella, è inoltre necessario creare gruppi di file e uno schema di partizionamento che utilizza la funzione di partizionamento per assegnare i risultati della funzione ai gruppi di file. Quindi devi inserire una chiave cluster sulla tabella che utilizza quello schema di partizionamento.
Imposta il partizionamento
Non sono un esperto di SQL da riga di comando. Ho usato l'interfaccia SSMS per impostare i gruppi di file pfg1 (con un file pf1) e pfg2 (con un file pf2). Quindi ho dichiarato la funzione e lo schema di partizionamento:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Creare la tabella e l'indice cluster
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Dopo aver fatto ciò, quando si esegue una query su sys.partitions (I have 2005), si vede che la tabella ora ha due partizioni invece di una sola per la tabella. Ciò indica che abbiamo implementato completamente il partizionamento per questa tabella.
select * from sys.partitions where object_id = object_id('IDRanges')
ID_partizione_ID oggetto_id indice_partizione file hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0
72057597780361216 770674389 1 2 72057597780361216 0
Ora che abbiamo due partizioni (con un numero di righe per ciascuna), possiamo condurre un esperimento.
Inserisci le righe
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Controlla le partizioni sys.per vedere cosa è successo.
select * from sys.partitions where object_id = object_id('IDRanges')
ID_partizione_ID oggetto_id indice_partizione file hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Sì. Una riga in ogni partizione.
Sposta una riga.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Controlla le partizioni
select * from sys.partitions where object_id = object_id('IDRanges')
ID_partizione_ID oggetto_id indice_partizione file hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0
La prima partizione ora ha due righe invece di 1 e la seconda partizione ha zero righe anziché due.
Penso che ciò confermi che la riga è stata spostata automaticamente a seguito della modifica della chiave cluster in una tabella partizionata.