Créer une vue partitionnée SQL Server pour regrouper des tables

Comment créer une vue partitionnée avec SQL Server et regrouper les données de plusieurs tables ? Ce script est un exemple simple pour créer une vue qui pointe sur trois tables différentes. Dans cet exemple, chaque table des Ventes contiendrait les ventes d’un mois ou encore d’un trimestre, pour optimiser les performances.

Code pour créer une vue partitionnée SQL Server

Voici un exemple de vue partitionnée horizontalement. C’est aussi une vue locale car toutes les données sont stockées sur le même serveur de base de données. Les tables sous-jacentes sont appelées les tables membres de la vue.

CREATE VIEW [dbo].[V_VENTES_P]
AS 
SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Periode1' as [Periode]
FROM [dbo].[VENTES_01]

UNION ALL 

SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Periode2' as [Periode]
FROM [dbo].[VENTES_02]

UNION ALL 

SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Periode3' as [Periode]
FROM [dbo].[VENTES_03]

-- etc..

Partitionnement horizontal par mois d’une vue SQL Server

En effet, pour aller au bout du concept, il suffirait de créer 12 tables avec une table par mois, et ainsi partitionner les données des ventes de façon mensuelle. Par exemple :

  • Janvier : VENTES_01
  • Février : VENTES_02
  • Mars : VENTES_03
  • Avril : VENTES_04
  • Mai : VENTES_05
  • Juin : VENTES_06
  • Juillet : VENTES_07
  • Aout : VENTES_08
  • Septembre : VENTES_09
  • Octobre : VENTES_10
  • Novembre : VENTES_11
  • Décembre : VENTES_12

Cette requête crée une vue appelée V_VENTES_M qui regroupe les données de ventes de tous les mois de l’année à partir des tables VENTES_01 à VENTES_12. La colonne Mois est ajoutée pour identifier de quel mois chaque ligne provient.

CREATE VIEW [dbo].[V_VENTES_MOIS]
AS 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Janvier' AS [Mois]
  FROM [dbo].[VENTES_01]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Février' AS [Mois]
  FROM [dbo].[VENTES_02]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Mars' AS [Mois]
  FROM [dbo].[VENTES_03]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Avril' AS [Mois]
  FROM [dbo].[VENTES_04]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Mai' AS [Mois]
  FROM [dbo].[VENTES_05]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Juin' AS [Mois]
  FROM [dbo].[VENTES_06]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Juillet' AS [Mois]
  FROM [dbo].[VENTES_07]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Août' AS [Mois]
  FROM [dbo].[VENTES_08]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Septembre' AS [Mois]
  FROM [dbo].[VENTES_09]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Octobre' AS [Mois]
  FROM [dbo].[VENTES_10]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Novembre' AS [Mois]
  FROM [dbo].[VENTES_11]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Décembre' AS [Mois]
  FROM [dbo].[VENTES_12];
Requête PIVOT SQL Server

Partitionnement horizontal par trimestres d’une vue MS SQL

Ou encore un partitionnement des chiffres de ventes par trimestre :

  • Premier trimestre : VENTES_Q1
  • Deuxième trimestre : VENTES_Q2
  • Troisième trimestre : VENTES_Q3
  • Quatrième trimestre : VENTES_Q4
CREATE VIEW [dbo].[V_VENTES_TRIMESTRE]
AS
   SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Q1' as Trimestre
   FROM [dbo].[VENTES_Q1]
   UNION ALL
   SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Q2' as Trimestre
   FROM [dbo].[VENTES_Q2]
   UNION ALL
   SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Q3' as Trimestre
   FROM [dbo].[VENTES_Q3]
   UNION ALL
   SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], 'Q4' as Trimestre
   FROM [dbo].[VENTES_Q4];

Créer une vue partitionnée par années avec un script T-SQL

Toutefois, un modèle largement utilisé est le partitionnement par années. En effet, les années passées sont rarement ou très peu utilisées, ce qui améliore considérablement les performances lors des requêtes sur les données de l’année en cours. Comme par exemple :

  • D’abord, l’Année 2020 et passées: VENTES_2020
  • Année 2021: VENTES_2021
  • Année 2022: VENTES_2022
  • Enfin, l’année 2023 et futures: VENTES_2023

Cependant, ce partitionnement annuel implique de gérer l’insertion des données dynamiquement sur l’année adéquate en fonction de la date effective des données concernées. Paradoxalement, noter qu’il est possible d’insérer des données dans une vue SQL Server. C’est à dire que les données seront insérées directement dans la table source de la vue. Evidemment, seules les colonnes présentes dans la vue sont accessible depuis la commande Insert Into.

CREATE VIEW [dbo].[V_VENTES_ANNEES]
AS 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], '2020' AS [ANNEE]
  FROM [dbo].[VENTES_2020_et_anterieur]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], '2021' AS [ANNEE]
  FROM [dbo].[VENTES_2021]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], '2022' AS [ANNEE]
  FROM [dbo].[VENTES_2022]
  UNION ALL 
  SELECT [NombreClients], [NombreVentes], [Montant_HT], [Montant_TTC], '2023' AS [ANNEE]
  FROM [dbo].[VENTES_2023_et_suivant];

Ce cette manière, une requête filtrée sur un mois particulier ne récupère que les données sur une seule table.

Conclusion sur le partitionnement horizontal avec SQL Server

En conclusion, créer une vue partitionnée SQL Server permet de regrouper des tables une vue unique, tout en optimisant les performances des requêtes. En effet, en répartissant les données sur plusieurs tables, voire plusieurs fichiers de bases de données physiques. Le partitionnement horizontal peut se faire de différentes façons, par mois, trimestre ou année selon les besoins.

Les vues partitionnées sont particulièrement utiles pour les tables volumineuses avec des données historiques, où l’accès aux données récentes est plus fréquent que l’accès aux données anciennes. L’utilisation de vues partitionnées peut améliorer considérablement les performances des requêtes et réduire le temps de traitement des données. Voici en outre comment créer une table avec SQL Server.

Créer une table SQL Server avec CREATE TABLE

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *