OVH Cloud OVH Cloud

Les vues indexées

4 réponses
Avatar
Webny
Bonjour,
Est-ce que sql2000 Server version Standard gère les vues indexées ?
Merci

4 réponses

Avatar
Fred BROUARD
Webny a écrit :
Bonjour,
Est-ce que sql2000 Server version Standard gère les vues indexées ?
Merci




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.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Webny
merci de votre réponse.


"Fred BROUARD" a écrit :

Webny a écrit :
> Bonjour,
> Est-ce que sql2000 Server version Standard gère les vues indexées ?
> Merci
>

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.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Avatar
zoltix
Fred BROUARD a écrit :
Webny a écrit :
Bonjour,
Est-ce que sql2000 Server version Standard gère les vues indexées ?
Merci




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.

A +





je ne comprends pas bien ce que c'est "en remplacement d'une requête
équivalente".

Merci d'avance pour l'explication
Avatar
Fred BROUARD
zoltix a écrit :
Fred BROUARD a écrit :
Webny a écrit :
Bonjour,
Est-ce que sql2000 Server version Standard gère les vues indexées ?
Merci




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.

A +





je ne comprends pas bien ce que c'est "en remplacement d'une requête
équivalente".



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...

A +


Merci d'avance pour l'explication




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************