Visualisation et création des index manquants

Voici deux petites requêtes pour visualiser et créer les index manquants sous MS SQL Server 2005/2008

Visulation des index manquants pour une base particulière :


USE <mabase>;
GO
SELECT  statement AS TABLE_NAME,
         CASE WHEN equality_columns IS NOT NULL  
               AND inequality_columns IS NOT NULL  
              THEN equality_columns + ', ' + inequality_columns  
              WHEN equality_columns IS NOT NULL  
               AND inequality_columns IS     NULL  
               THEN equality_columns  
              WHEN equality_columns IS     NULL  
               AND inequality_columns IS NOT NULL  
              THEN inequality_columns  
         END AS INDEX_KEY,
         included_columns AS COL_INCLUDE
FROM sys.dm_db_missing_index_details  
WHERE database_id = DB_ID()
ORDER BY 1, 2;
-- créer tous les index manquants en une seule requête avec un FILL FACTOR de 90%
SELECT 'CREATE INDEX X_' + REPLACE(CAST(NEWID() AS VARCHAR(50)), '-', '')  
       + ' ON ' + statement +' ('
       + CASE WHEN equality_columns IS NOT NULL  
               AND inequality_columns IS NOT NULL  
              THEN equality_columns + ', ' + inequality_columns + ' )'
              WHEN equality_columns IS NOT NULL  
               AND inequality_columns IS     NULL  
              THEN equality_columns + ' )'
              WHEN equality_columns IS     NULL  
               AND inequality_columns IS NOT NULL THEN inequality_columns + ' )'
         END
       + CASE WHEN included_columns IS NOT NULL  
              THEN ' INCLUDE (' + included_columns + ')' ELSE ''  
         END  
       + ' WITH (FILLFACTOR = 90);'
FROM sys.dm_db_missing_index_details  
WHERE database_id = DB_ID();
-- ou encore :
SELECT 'CREATE INDEX X_' + REPLACE(CAST(NEWID() AS VARCHAR(50)), '-', '')  
       + ' ON ' + statement +' ('
       + COALESCE(equality_columns + ', ' + inequality_columns, equality_columns, inequality_columns) +')'
       + COALESCE(' INCLUDE (' + included_columns +')', '')
       + ' WITH (FILLFACTOR = 90);'
FROM sys.dm_db_missing_index_details  
WHERE database_id = DB_ID()

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

MVP Microsoft SQL Server

2 réflexions au sujet de « Visualisation et création des index manquants »

Laisser un commentaire