La puissance de RushMore
Par Goupil, mardi 27 février 2007 à 11:37 :: General :: #2 :: rss
"La Vérité ne devient pas erreur parce que nul ne la voit."
J'ai relevé sur le forum sqlserver de Microsoft une intéressante question relative aux vues indexées, j'en cite ici quelques extraits, ainsi que les réponses de Fred BROUARD expert en la matière.
A la question Est-ce que sql2000 Server version Standard gère les vues indexées ?
Fred BROUARD répondait :
"En principe toutes les éditions de SQL Server permettent de créer et d'utiliser des vues indexées. Cepandant seule la version entreprise permet d'utiliser une vue indexée, en remplacement d'une requête équivalente."
et précisait:
"Petit exemple :
soit la table dbo.T_EMPLOYEE_EMP dont la structure est :
CREATE TABLE dbo.T_EMPLOYEE_EMP ( EMP_ID int IDENTITY NOT NULL PRIMARY KEY,
EMP_NOM char(32) NOT NULL, EMP_PRENOM varchar(25), EMP_TITRE char(8), EMP_ADRESSE1 varchar(38), EMP_ADRESSE2 varchar(38), EMP_ADRESSE3 varchar(38), EMP_CP char(8), EMP_VILLE varchar(32), EMP_TEL char(20), EMP_GSM char(20), EMP_DATE_ENTREE datetime, EMP_INDICE float, EMP_SALAIRE int, EMP_MATRICULE uniqueidentifier DEFAULT NEWID(), EMP_SERVICE varchar(16), EMP_SEXE char(5))
La demande : comptez le nombre d'hommes et de femmes du service RH.
Requête directe sur la table :
SELECT COUNT(*), EMP_SEXE FROM T_EMPLOYEE_EMP WHERE EMP_SERVICE = 'RH' GROUP BY EMP_SEXE
Avec 1 253 500 lignes le coût de la requête sur la table "telle quelle" est de : 32 296 pages lues. (On considére qu'il y a 10 services et 2 sexes)
Avec la création de la vue suivante :
CREATE VIEW V_EMP_SSC WITH SCHEMABINDING AS SELECT COUNT_BIG(*) AS NOMBRE,
EMP_SEXE AS SEXE,
EMP_SERVICE AS SERVICE
FROM dbo.T_EMPLOYEE_EMP GROUP BY SEX_ID, SRV_ID GO
et de son index :
CREATE UNIQUE CLUSTERED INDEX X_SSC ON V_EMP_SSC (SERVICE, SEXE) GO
Voici maintenant la requête basée sur cette vue répondant à la même question :
SELECT NOMBRE, SEXE FROM V_EMP_SSC WHERE SERVICE = 'RH'
Le coût de cette requête est de : 2 pages lues. En effet 10 services par 2 sexes cela fait 20 lignes d'environ 32 octets soit 640 octets ce qui tient dans une page (une page = 8060 octets). Mais il faut aussi une page de navigation dans l'index, soit 2 pages à lire...
Le gain est donc de 16 000 fois....
Mais si votre requête est restée celle de départ c'est à dire
SELECT COUNT(*), EMP_SEXE FROM T_EMPLOYEE_EMP WHERE EMP_SERVICE = 'RH' GROUP BY EMP_SEXE
Seule la version Entreprise la remplacera par :
SELECT NOMBRE, SEXE FROM V_EMP_SSC WHERE SERVICE = 'RH'
et le gain effectif sera bien de 16 000 sans que le développeur n'ait eu à modifier sa requête..."
Voila pour la démonstration limpide de Fred BROUARD, qui précise que Seule la version Entreprise....
Il faut se rappeler, pour ceux qui l'oublieraient, que la technologie RUSHMORE fait la force de Visual FoxPro depuis déjà longtemps, et que ce gain de performance peut être obtenu avec une bonne architecture sur des fichiers DBF.
CQFD
Commentaires
1. Le mercredi 28 février 2007 à 23:33, par Thierry Nivelet
2. Le vendredi 2 mars 2007 à 09:50, par Goupil
Ajouter un commentaire