Une vue indexée (Indexed View, vue matérialisée avec index) est une vue (VIEW) pour laquelle un index unique cluster a été créé. Cela permet de stocker physiquement les résultats de la requête sur le disque et d'utiliser l'index pour accélérer l'accès.
Avantages:
Limitations:
TEXT, NTEXT, IMAGE, certaines fonctions).CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);
Q : Toutes les vues permettent-elles de créer un index (clusterisé) ?
R : Non, seules les VIEW qui respectent pleinement les restrictions peuvent être indexées (par exemple, pas de références externes, fonctions agrégées compatibles, etc.). Sinon, la requête de création d'index renverra une erreur.
Histoire
Sur un projet réel dans un système bancaire, il était nécessaire d’accélérer les requêtes sur des rapports agrégés. Une vue indexée a été créée sans analyser la charge sur les mises à jour des tables. Lors d'opérations massives d'insertion, la performance de la table principale a chuté en raison des coûts significatifs de mise à jour de l'index de la vue.
Histoire
Un spécialiste pensait à tort qu'il était possible d'indexer une VIEW avec un JOIN sur une table externe et la fonction GETDATE(). La requête de création d'index s'est soldée par une erreur "Impossible de créer un index sur une vue avec des fonctions non déterministes". Une journée a été perdue pour corriger l'architecture du projet.
Histoire
Dans un grand projet e-commerce, la mise à jour des données dans la table de base "Products" a causé des blocages. La raison en était la gestion incorrecte des transactions en présence d'une vaste vue indexée, dans laquelle l'agrégation touchait des millions de lignes.