cours
Vue matérialisée SQL : Améliorer les performances des requêtes
Les vues matérialisées sont une fonctionnalité puissante des bases de données SQL qui permet d'optimiser les performances des requêtes en stockant les résultats d'une requête physiquement sur le disque, ce qui permet d'accélérer les performances des requêtes en réduisant les recalculs. Ils sont donc particulièrement utiles pour traiter des requêtes complexes et gourmandes en ressources qui impliquent des jointures, des agrégations et de grands ensembles de données.
Pour commencer, je vous recommande de suivre le cours Introduction à SQL et le cursus de compétences SQL Fundamentals de DataCamp pour apprendre les bases de SQL et comment extraire des données à l'aide de requêtes. L'aide-mémoire sur les bases de SQL sera un guide utile pour les fonctions SQL courantes permettant de filtrer et d'agréger des données.
Que sont les vues matérialisées SQL ?
Les vues matérialisées sont un type spécial d'objet de base de données qui stocke physiquement les résultats d'une requête au lieu de les calculer à la volée comme les vues ordinaires. Alors qu'une vue SQL ordinaire est une requête SQL enregistrée qui génère ses résultats de manière dynamique à chaque fois qu'on y accède, une vue matérialisée précalcule et stocke les données dans une structure de type tableau.
En stockant l'ensemble des résultats sur le disque, les vues matérialisées peuvent réduire de manière significative la charge d'une base de données, améliorer les performances des requêtes et contribuer à rationaliser le traitement des opérations à forte intensité de calcul.
Création d'une vue matérialisée en SQL
Le processus de création d'une vue matérialisée implique l'utilisation de la syntaxe CREATE MATERIALIZED VIEW
, qui varie légèrement d'une base de données SQL à l'autre. Les méthodes suivantes montrent comment créer des vues matérialisées dans SQL Server, PostgreSQL et Oracle.
Vue matérialisée dans PostgreSQL
Dans PostgreSQL, vous pouvez créer une vue matérialisée en utilisant la syntaxe suivante. Cet exemple crée une vue matérialisée appelée sales_summary
qui regroupe la quantité totale et le revenu de chaque produit.
-- Create a materialized view to summarize sales data
CREATE MATERIALIZED VIEW sales_summary AS
SELECT product_id,
SUM(quantity) AS total_quantity,
SUM(price * quantity) AS total_revenue
FROM sales
GROUP BY product_id;
Vue matérialisée dans SQL Server
Dans SQL Server, les vues matérialisées sont appelées "vues indexées". Les tableaux sous-jacents doivent répondre à des exigences spécifiques pour créer une vue indexée, telles que l'activation de l'option WITH SCHEMABINDING
.
L'option WITH SCHEMABINDING
garantit que le schéma ne peut pas être modifié tant que la vue indexée existe. Un index unique en grappe doit être créé pour que la vue soit matérialisée.
-- Create an indexed view with schema binding to summarize sales data
CREATE VIEW sales_summary
WITH SCHEMABINDING
AS
SELECT product_id,
COUNT_BIG(*) AS record_count,
SUM(ISNULL(quantity, 0)) AS total_quantity,
SUM(ISNULL(price, 0) * ISNULL(quantity, 0)) AS total_revenue
FROM sales
GROUP BY product_id;
GO
-- Create a unique clustered index to materialize the view
CREATE UNIQUE CLUSTERED INDEX IX_sales_summary
ON sales_summary (product_id);
GO
Si vous souhaitez en savoir plus sur SQL Server, je vous recommande de consulter notre piste de compétences SQL Server Fundamentals pour vous familiariser avec les différentes compétences SQL pour l'analyse de données.
Vue matérialisée dans Oracle
La syntaxe de création des vues matérialisées dans Oracle est similaire à celle de la base de données PostgreSQL. Nous pouvons également spécifier des options de rafraîchissement, telles que ON DEMAND
ou ON COMMIT
.
-- Create a materialized view to summarize sales data
CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FAST ON DEMAND
AS
SELECT product_id, SUM(quantity) AS total_quantity, SUM(price * quantity) AS total_revenue
FROM sales
GROUP BY product_id;
Vue matérialisée dans les bases de données distribuées
Les vues matérialisées peuvent également spécifier des méthodes de distribution afin d'améliorer les performances des bases de données telles que Azure Synapse ou Amazon Redshift, qui prennent en charge les entrepôts de données distribués.
Distribution de hachages pour Amazon Redshift
La requête ci-dessous crée une vue matérialisée appelée sales_summary
qui agrège la quantité totale et le revenu par product_id
. Les options DISTSTYLE KEY
et DISTKEY(product_id)
garantissent que les données sont réparties sur les nœuds en fonction de product_id
, ce qui améliore les performances des requêtes qui s'appuient sur cette colonne.
-- Create a materialized view with key-based distribution for efficient joins
CREATE MATERIALIZED VIEW sales_summary
DISTSTYLE KEY
DISTKEY(product_id)
AS
SELECT product_id,
SUM(quantity) AS total_quantity,
SUM(price * quantity) AS total_revenue
FROM sales
GROUP BY product_id;
Distribution Round-Robin pour Azure Synapse
Cette requête crée une vue matérialisée nommée sales_summary
qui agrège la quantité totale et les recettes par product_id
. La distribution ROUND_ROBIN
répartit uniformément les données entre les nœuds, ce qui est utile pour les scénarios qui ne s'appuient pas fortement sur des jointures.
-- Create a materialized view with round-robin distribution for balanced data storage
CREATE MATERIALIZED VIEW sales_summary
WITH (DISTRIBUTION = ROUND_ROBIN)
AS
SELECT product_id,
SUM(quantity) AS total_quantity,
SUM(price * quantity) AS total_revenue
FROM sales
GROUP BY product_id;
Actualisation d'une vue matérialisée en SQL
Les données des vues matérialisées peuvent être rafraîchies pour rester à jour par rapport aux tableaux sous-jacents. Le choix de la méthode de rafraîchissement dépend des exigences de l'entreprise et des considérations de performance de la base de données concernée. Examinons les méthodes de rafraîchissement des données suivantes pour les vues matérialisées.
Rafraîchissement manuel
Dans le cas d'une actualisation manuelle, la vue matérialisée n'est actualisée qu'à la demande explicite de l'utilisateur. Cette approche permet de contrôler au mieux le moment où les données sont mises à jour, ce qui la rend adaptée aux scénarios dans lesquels les données changent peu souvent ou les mises à jour sont effectuées pendant les heures creuses.
La requête suivante montre la méthode de rafraîchissement manuel dans PostgreSQL.
REFRESH MATERIALIZED VIEW sales_summary;
Rafraîchissement périodique
La vue matérialisée est automatiquement actualisée à des intervalles spécifiés pendant la période d'actualisation, ce qui garantit la mise à jour des données sans intervention de l'utilisateur. Cette méthode est utile pour les applications sensibles au temps où les données doivent être relativement actuelles.
L'exemple ci-dessous montre comment inclure des rafraîchissements périodiques dans Oracle en définissant des programmes de rafraîchissement directement dans l'instruction CREATE MATERIALIZED VIEW
. Le temps de rafraîchissement est réglé sur des intervalles d'une heure.
-- Create a materialized view to aggregate sales data
-- Set to refresh completely every hour
CREATE MATERIALIZED VIEW sales_summary
REFRESH COMPLETE START WITH (SYSDATE) NEXT (SYSDATE + 1/24)
AS
SELECT product_id,
SUM(quantity) AS total_quantity,
SUM(price * quantity) AS total_revenue
FROM sales
GROUP BY product_id;
Rafraîchissement à la demande
L'actualisation à la demande se produit chaque fois que les données sous-jacentes changent, généralement par le biais d'un mécanisme de déclenchement. Cela permet de s'assurer que la vue matérialisée contient toujours les données mises à jour. Par exemple, dans PostgreSQL, des déclencheurs peuvent être mis en place pour actualiser la vue lorsque des changements interviennent dans le tableau sous-jacent.
Actualisation complète ou incrémentale
Vous pouvez actualiser les données de manière complète ou incrémentale dans les vues matérialisées. Le tableau suivant résume les deux méthodes et les cas d'utilisation.
Type de rafraîchissement | Description | Avantages | Inconvénients |
---|---|---|---|
Rafraîchissement complet | Recharge l'ensemble des données, en remplaçant toutes les données existantes dans la vue. | - Simple à mettre en œuvre - Reconstruit l'ensemble de la vue |
- Exigeant en ressources pour les grands ensembles de données - Temps de rafraîchissement plus longs |
Rafraîchissement progressif | Ne met à jour que les parties modifiées de la vue | - Plus efficace, en ne traitant que les données modifiées - Convient aux grands ensembles de données faisant l'objet de changements fréquents |
- Nécessite une configuration supplémentaire (par exemple, des journaux pour suivre les modifications) - N'est pas toujours pris en charge pour toutes les requêtes |
Meilleures pratiques pour les vues matérialisées
Lorsque vous utilisez des vues matérialisées, il est important de prendre en compte les pratiques suivantes pour une utilisation optimale.
- Choisir les bonnes requêtes pour matérialiser: matérialiser les requêtes complexes et gourmandes en ressources, telles que les jointures, les agrégations et les sous-requêtes. Ces requêtes bénéficieraient de résultats précalculés qui réduiraient la charge de la base de données.
- Équilibrer la fraîcheur des données et la performance: En fonction de votre cas d'utilisation, choisissez la stratégie de rafraîchissement appropriée, telle que les méthodes de rafraîchissement manuel, périodique ou à la demande. Utilisez le rafraîchissement incrémental pour réduire la charge de calcul et surveillez la fréquence de modification des données pour déterminer les intervalles de rafraîchissement.
- Utilisation des vues matérialisées pour optimiser les charges de travail lourdes en termes de requêtes: Exploitez les vues matérialisées pour les rapports BI et les tableaux de bord pour lesquels des temps de réponse rapides sont essentiels. Vous pouvez également indexer les colonnes utilisées dans les vues matérialisées pour accélérer le filtrage et le tri.
Vues matérialisées dans différents systèmes de base de données
Comme vous l'avez vu, les différents systèmes de base de données offrent une prise en charge variable des vues matérialisées. Le tableau suivant résume les caractéristiques uniques et les limites des vues matérialisées dans ces bases de données.
Système de base de données | Méthodes de rafraîchissement | Rafraîchissement progressif | Rafraîchissement automatique | Caractéristiques spéciales/limites |
---|---|---|---|---|
PostgreSQL | Manuel (RÉFRIGÉRER LA VUE MATÉRIALISÉE) | Non | Non | Il n'y a pas de rafraîchissement incrémentiel natif. Une programmation manuelle est nécessaire. |
Serveur SQL | Automatique (vues indexées) | Oui (Synchronisation automatique) | Oui |
Requiert |
Oracle | Manuel, sur engagement, programmé | Oui (rafraîchissement rapide) | Oui | Prise en charge de l'actualisation rapide, du partitionnement et du parallélisme. Nécessite l'affichage des journaux. |
Amazon Redshift | Manuel, programmé | Oui | Oui | Prend en charge les données distribuées avec une distribution par hachage ou round-robin. |
MySQL | Non pris en charge de manière native | Non | Non | Solutions de contournement nécessaires (par exemple, tableaux temporaires, outils tiers). |
Azure Synapse | Manuel, programmé | Oui | Oui | Permet d'optimiser les différentes stratégies de distribution. |
Si vous utilisez SQL Server comme base de données préférée, je vous recommande de suivre le cours Introduction à SQL Server de DataCamp pour maîtriser les bases de Microsoft SQL Server pour l'analyse de données. Consultez également notre cursus de développeur SQL Server pour comprendre comment optimiser les requêtes et résoudre les problèmes dans SQL Server.
Autres éléments à prendre en compte
Bien que les vues matérialisées SQL soient utiles pour l'optimisation des requêtes, elles présentent également des difficultés et des limites. Vous trouverez ci-dessous les problèmes les plus courants liés aux vues matérialisées et la manière de les résoudre.
- Rangement Au-dessus de la tête : Les vues matérialisées stockent les résultats des requêtes physiquement sur le disque, ce qui augmente les besoins en stockage. Pour éviter de consommer de l'espace de stockage inutile, ne matérialisez les vues que pour les requêtes gourmandes en ressources et partitionnez les vues matérialisées pour les grands ensembles de données.
- Actualiser les coûts et rafraîchir les frais généraux : La synchronisation des vues matérialisées avec les tableaux sous-jacents peut demander beaucoup de ressources, en particulier pour les vues qui nécessitent des mises à jour fréquentes ou qui impliquent des calculs complexes. Pour éviter la surcharge d'actualisation, utilisez l'actualisation incrémentielle lorsqu'elle est prise en charge ou définissez les intervalles d'actualisation appropriés lorsque l'utilisation de la base de données est plus faible.
- Cohérence et synchronisation des données : Les vues matérialisées peuvent devenir obsolètes si les données sous-jacentes changent fréquemment, ce qui entraîne des problèmes de données périmées. Pour éviter ce problème, sélectionnez la stratégie de rafraîchissement appropriée et surveillez les modifications des données afin d'ajuster la stratégie de rafraîchissement si nécessaire.
- Frais généraux de maintenance : Les vues matérialisées nécessitent une maintenance continue, notamment pour définir des calendriers d'actualisation appropriés, surveiller l'utilisation de l'espace de stockage et suivre les dépendances des tableaux sous-jacents. Pour surmonter ce problème, utilisez toujours des programmes d'actualisation automatisés, surveillez les performances du système et mettez en place des alertes en cas d'échec de l'actualisation.
Conclusion
Les vues matérialisées sont utiles dans les bases de données SQL pour optimiser les performances des requêtes. Ils stockent les résultats de la requête physiquement sur le disque, ce qui permet d'accélérer les performances de la requête en réduisant les recalculs. Cette caractéristique rend les vues matérialisées utiles pour traiter des requêtes complexes et gourmandes en ressources qui impliquent des jointures, des agrégations et des ensembles de données volumineux. Comprendre comment mettre en œuvre des vues matérialisées dans différentes bases de données vous aidera à améliorer vos compétences en matière d'optimisation des requêtes et des bases de données.
Si vous cherchez à améliorer vos compétences en SQL, je vous recommande d'essayer le cursus Associate Data Analyst in SQL de DataCamp pour devenir un analyste de données compétent. La formation Reporting in SQL vous aidera également à maîtriser la création de rapports et de tableaux de bord complexes pour une présentation efficace des données. Enfin, vous devriez obtenir la certification SQL Associate pour démontrer votre maîtrise de l'utilisation de SQL pour résoudre des problèmes commerciaux et vous démarquer des autres professionnels.
Devenez certifié SQL
FAQ
Qu'est-ce qu'une vue matérialisée en SQL ?
Une vue matérialisée est un objet de base de données qui stocke physiquement le résultat d'une requête, optimisant ainsi les performances en évitant les recalculs.
En quoi une vue matérialisée est-elle différente d'une vue normale ?
Contrairement aux vues ordinaires, qui récupèrent dynamiquement les données à chaque accès, les vues matérialisées stockent les données sous forme de tableaux physiques, ce qui permet d'accélérer l'exécution des requêtes.
Quelle est la différence entre un rafraîchissement complet et un rafraîchissement incrémentiel ?
Une actualisation complète recalcule l'ensemble de la vue, tandis qu'une actualisation incrémentielle ne met à jour que les données modifiées, ce qui améliore l'efficacité.
Quelles sont les bases de données qui prennent en charge les vues matérialisées ?
PostgreSQL, SQL Server (vues indexées), Oracle, Amazon Redshift et Azure Synapse Analytics prennent en charge les vues matérialisées, chacun avec des fonctionnalités et des limitations différentes, tandis que MySQL ne dispose pas d'une prise en charge native.
Les vues matérialisées consomment-elles de l'espace de stockage supplémentaire ?
Oui, étant donné qu'elles stockent les données physiquement, les vues matérialisées augmentent les besoins en stockage.
Apprenez SQL avec DataCamp
cours
Introduction aux bases de données relationnelles en SQL
cours