La vue sys.dm_db_missing_index_details fournit l’ensemble des index que MS SQL Server estime manquants dans la vie du serveur. On peut alors décider de les créer tous, même s’il est plus judicieux d’étudier chacun d’entre eux afin de décider in fine si tel ou tel index n’est pas redondant ou inclus…
Voici la requête qui créé le script SQL de création de tous les index manquants :
SELECT 'CREATE INDEX X_MID_'
+ REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), GETDATE(), 121), '-', ''), ' ','_'),':','') + '_'
+ REPLACE(CAST(NEWID() AS VARCHAR(38)), '-', '_')
+ ' ON ' + statement + ' ('
+ COALESCE(equality_columns + ', ' + inequality_columns, equality_columns, inequality_columns) +')'
+ COALESCE(' INCLUDED (' + included_columns +')', '')
+ ' ON FG_INDEX ' --> précise le "filegroup" (espace de stockage) de destination de l'index
+ ' WITH ( FILLFACTOR = 80);' --> précise le facteur de remplissage des pages de données de l'index
FROM sys.dm_db_missing_index_details;
Le nom de l’index sera composé comme suit :
X_MID_AAAAMMJJ_HHMMSS_…
ou MID signifie Missing Index Details
AAAAMMJJ est la date numérisée au format Année Mois Jour
HHMMSS est l’heure numérisée au format Heure Minute Seconde
… est un GUID (ou UUID) calculé à la volée.
Nous avons spécifié l’emplacement du stockage de ces index (clause ON FG_INDEX). Si vous n’avez pas prévu un tel espace de stockage, supprimez la ligne 7 de cette requête.
Nous avons spécifié un facteur de remplissage (FILLFACTOR) des pages de données de l’index de 80%. Si cette option vous parait inutile, supprimez la ligne 8 de cette requête.
De manière générale, si vous avez des options particulière à spécifier (clause WITH) alimentez la ligne 8 de cette requête.
--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
Je sais pas si cela a changé depuis la version 2005 mais en tout cas, en sql server 2005, j’ai des soucis avec le script généré.
1 : INCLUDED au lieu INCLUDE (c’est tout con mais faut le voir dans la masse de script quand la DB est mal administrée et qu’il y a plein d’index à créer)
2 : j’ai du mettre la clause ON [FILEGROUP] après la clause WITH sans quoi j’obtenais une erreur de syntaxe.
Quoi qu’il en soit, merci pour ce script d’une grande utilité !