Pour tester cela, l'expérience doit réellement partitionner la table. Voir http://www.kodyaz.com/articles/how-to-partition-table-non-partitioned-table-sql-server-2008.aspx
L'interrogation de la fonction de partitionnement vous indique simplement ce que dit la fonction de partitionnement. Il ne dit pas où les données sont stockées. Vous pouvez configurer une fonction de partitionnement et l'exécuter sans réellement partitionner une table, comme cela a déjà été démontré ici.
Pour partitionner la table, vous devez également créer des groupes de fichiers et un schéma de partitionnement qui utilise la fonction de partitionnement pour affecter des résultats de fonction aux groupes de fichiers. Ensuite, vous devez mettre une clé en cluster sur la table qui utilise ce schéma de partitionnement.
Configurer le partitionnement
Je ne suis pas un expert en ligne de commande SQL. J'ai utilisé l'interface SSMS pour configurer les groupes de fichiers pfg1 (avec un fichier pf1) et pfg2 (avec un fichier pf2). Ensuite, j'ai déclaré la fonction et le schéma de partitionnement:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Créer la table et l'index clusterisé
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Après cela, lorsque vous interrogez sys.partitions (j'ai 2005), vous voyez que la table a maintenant deux partitions au lieu d'une seule pour la table. Cela indique que nous avons entièrement implémenté le partitionnement pour cette table.
select * from sys.partitions where object_id = object_id('IDRanges')
id_partition id_objet index_id numéro_partition hobt_id lignes
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0
72057597780361216 770674389 1 2 72057597780361216 0
Maintenant que nous avons deux partitions (avec un nombre de lignes pour chacune), nous pouvons mener une expérience.
Insérez les lignes
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Vérifiez les partitions sys.pour voir ce qui s'est passé.
select * from sys.partitions where object_id = object_id('IDRanges')
id_partition id_objet index_id numéro_partition hobt_id lignes
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Oui. Une ligne dans chaque partition.
Déplacez une rangée.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Vérifiez les partitions
select * from sys.partitions where object_id = object_id('IDRanges')
id_partition id_objet index_id numéro_partition hobt_id lignes
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0
La première partition a maintenant deux lignes au lieu de 1, et la deuxième partition a zéro ligne au lieu de deux.
Je pense que cela confirme que la ligne a été automatiquement déplacée suite à la modification de la clé en cluster dans une table partitionnée.