181
6.3 Vues indexées
Mais, concernant les vues dynamiques d’index manquants, voici une requête qui
vous donne toutes les informations :
SELECT object_name(object_id) as objet, d.*, s.*
FROM sys.dm_db_missing_index_details d
INNER JOIN sys.dm_db_missing_index_groups g
ON d.index_handle = g.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats s
ON g.index_group_handle = s.group_handle
WHERE database_id = db_id()
ORDER BY s.user_seeks DESC, object_id
Comme elle vous dit tout, vous pouvez même faire générer par une requête le
code DDL nécessaire à la création des index, ainsi, vous n’avez plus qu’à copier ce
code et à l’exécuter.
Toutefois, ne créez pas forcément tous les index conseillés, mais concentrez-vous
sur ceux dont le nombre de « user seeks » est le plus importants : cette mesure vous
indique combien de fois l’index aurait pu être utile.
Voici un exemple de code pour générer vos index :
SELECT
'CREATE INDEX nix$' + lower(object_name(object_id)) + '$'
+ REPLACE(REPLACE(REPLACE(COALESCE(equality_columns,
inequality_columns), ']', ''), '[', ''), ', ', '_')
+ ' ON ' + statement + ' (' + COALESCE(equality_columns,
inequality_columns) + ') INCLUDE (' + included_columns + ')',
object_name(object_id) as objet, d.*, s.*
FROM sys.dm_db_missing_index_details d
JOIN sys.dm_db_missing_index_groups g
ON d.index_handle = g.index_handle
JOIN sys.dm_db_missing_index_group_stats s
ON g.index_group_handle = s.group_handle
WHERE database_id = db_id()
ORDER BY s.user_seeks DESC, objet
Nous verrons dans le chapitre 8 comment lire un plan d’exécution, ce qui vous
aidera à déterminer quels index construire pour vos requêtes.
6.3 VUES INDEXÉES
Une vue est une requête SELECT stockée sur le serveur. On la référence comme une
table dans une requête. Elle ne matérialise pas le résultat du SELECT. Donc, chaque
appel à la vue génère des appels aux tables sous-jacentes. Vous pouvez indexer vos
vues pour matérialiser les données. Lorsqu’une vue est indexée, elle maintient le
résultat de son SELECT dans un index clustered, qui doit lui aussi être maintenu à
chaque modification les lignes dans les tables sous-jacentes. Cette option est très
intéressante pour les larges volumes, sur des requêtes complexes qui mettent en jeu
de nombreuses jointures de tables. Elles permettent une sorte de dénormalisation
Précédent

- 193/334

Suivant