Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Vues indexées y compris sur Edition Express

Beaucoup de personnes croient que seule l'édition Enterprise supporte les vues indexées. Ceci n'est pas vrai, elle supporte les vues indexées de manière différentes des autres.

La vue indexée a pour effet de matérialiser les données ; on prend le résultat de la requête et on le stocke et on le maintient à jour en fonction des modifications des tables de base.
Le très gros avantage de l'utilisation des vues indexées sous SQL Server edition Enterprise, c'est que leur utilisation est totalement automatique. Vous n'avez rien d'autre à faire qu'à créer la vue indexée, l'optimiseur de requête l'utilise dès qu'un requête à une définition proche de celle de la vue. Ceci est très pratique si vous ne pouvez pas toucher au code des requêtes.

Voici un exemple où la vue indexée se révèle intéressante. Je suis sur la base exemple AdventureWorks.

CREATE VIEW v1
WITH
SCHEMABINDING
AS
SELECT
Product.Name
,
Customer.AccountNumber
,
SUM(SalesOrderDetail.OrderQty) AS SumOrderQty
,
COUNT_BIG(*) AS CB
FROM Sales.SalesOrderHeader
INNER JOIN Sales.SalesOrderDetail ON SalesOrderHeader.SalesOrderID = Sales.SalesOrderDetail.SalesOrderID
INNER JOIN Production.Product ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID
INNER JOIN Sales.Customer ON Sales.SalesOrderHeader.CustomerID = Sales.Customer.CustomerID
AND Sales.SalesOrderHeader.CustomerID = Sales.Customer.CustomerID
GROUP BY Product.Name, Customer.AccountNumber

Dans l'exemple je cumule les jointures et les agrégats le domaine de prédilection des vues indexées. Pour que cette vue deviennent une vue indexée, j'ai juste à ajouter un index.

CREATE UNIQUE CLUSTERED INDEX IX_v1 ON v1(Name, AccountNumber)

Les données sont maintenant matérialisées.

Sur SQL Server édition Enterprise vous n'avez rien de plus à faire, dès qu'une requête se rapproche suffisamment de la définition de la vue le moteur va automatiquement utiliser les données de la vue indexée.
Par contre sur les autres éditions il faut requêter directement la vue et forcer l'utilisation de l'index par NOEXPAND.

-- Execute la requête de la vue
-- On remplace le nom de la vue par sa définition
-- Comme on le fait pour une vue normale
 
SELECT * FROM v1

-- Renvoie les données de la vue indexée
-- Dans ce cas on demande explicitement à lire les données
-- de l'index créée précédement
 
SELECT * FROM v1 WITH(NOEXPAND)

A titre de comparaison la 1ère requête traite environ 20 Mo de donnée, met 13 secondes à s'exécuter (dont 8 par le CPU). La seconde (qui utilise donc les données matérialisées) traite seulement 6 Mo de données en 4 secondes (dont 1 par le CPU). Le gain est très net.

Petit conseil, avant de vous lancer dans la création de vues indexées, lisez l'aide en ligne à ce sujet. Il y a en effet enormément de restriction quant aux requête qu'il est possible d'utilser dans une vue indexée.

Et tous ces tests ont été réalisés avec SQL Server Express :o)

Bon tests et bon dev…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié mercredi 28 février 2007 20:02 par christian
Classé sous : ,

Commentaires

mercredi 28 février 2007 23:00 by ROMELARD Fabrice

# re: SQL Server : Vues indexées y compris sur Edition Express

Excellent ca.

Moi qui suis fan de la version Express ;)

Fabrice

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Solution Template et Project Template dans Visual Studio par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 2 heures et 17 minutes

- PocketIE et Assignation du SRC d'un Element IMG par Jerome Laban le il y a 3 heures et 9 minutes

- Conversion de fichiers RAW en fichier JPEG avec WPF par Perspective le il y a 3 heures et 45 minutes

- Mise à Jour du Moteur de Recherche des Arrêts de Bus de Montréal par Jerome Laban le il y a 4 heures et 29 minutes

- [WPF] XPSReader v0.2 par Blog Technique d'Audrey PETIT le il y a 5 heures et 30 minutes

- Entity Framework : providers Oracle, MySQL et PostgreSQL par Matthieu MEZIL le il y a 12 heures et 5 minutes

- [WPF] Nouvel article sur c2i.fr par Richard Clark le 09-06-2008, 17:33

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le 09-06-2008, 13:27

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02