82
Chapitre 4. Optimisation des objets et de la structure de la base de données
ADD FILE
( NAME = data2,
FILENAME = 'c:\temp\AdventureWorksd2.ndf',
SIZE = 1MB, maxsize = 100MB, FILEGROWTH = 1MB)
TO FILEGROUP fg2;
ALTER DATABASE AdventureWorks
ADD FILE
( NAME = data3,
FILENAME = 'c:\temp\AdventureWorksd3.ndf',
SIZE = 1MB, maxsize = 100MB, FILEGROWTH = 1MB)
TO FILEGROUP fg3;
Ceci étant fait, créons une fonction de partitionnement pour notre table
SalesOrderHeader :
USE AdventureWorks;
CREATE PARTITION FUNCTION pfOrderDate (datetime)
AS RANGE RIGHT
FOR VALUES ('20020101', '20030101');
Nous passons en paramètre le type de données auquel s’applique la fonction de
partitionnement, nous indiquons aussi si les plages vont être créées pour des valeurs
situées à gauche ou à droite des frontières exprimées. Ici, par exemple, la dernière
partition va contenir tous les OrderDate plus grands que le 01/01/2003, c’est-à-dire à
droite de cette valeur.
Cette fonction déclare donc trois partitions : tout ce qui vient avant la première
valeur, tout ce qui est entre '20020101' et '20030101', puis tout ce qui est à droite de
'20030101'.
Ce que nous pouvons vérifier grâce aux vues de métadonnées :
SELECT pf.name, pf.type_desc, pf.boundary_value_on_right, rv.boundary_id,
rv.value, pf.create_date
FROM sys.partition_functions pf
JOIN sys.partition_range_values rv ON pf.function_id = rv.function_id
ORDER BY rv.value;
Pour attribuer les partitions aux groupes de fichiers, nous créons un plan de
partitionnement :
CREATE PARTITION SCHEME psOrderDate
AS PARTITION pfOrderDate
TO (fg1, fg2, fg3);
Il nous reste ensuite à créer la table. Il suffit de récupérer le script de création de
la table Sales.SalesOrderHeader et de le modifier légèrement :
CREATE TABLE [Sales].[SalesOrderHeader_Partitionne](
[SalesOrderID] [int] IDENTITY(1,1) NOT NULL,
--...
[ModifiedDate] [datetime] NOT NULL DEFAULT (getdate())
) ON psOrderDate(OrderDate);
Précédent

- 94/334

Suivant