Le recalcul des index et des statistiques est une opération très utile après une migration de base de données d’un version de serveur à l’autre. En effet, le moteur relationnel évoluant, les statistiques (sous-jacente ou non aux index) ne sont pas forcément calculées de la même manière. Il est alors bon de reconstruire tous les index et de remettre à jours les statiques pour celles hors index. Voici deux petit scripts pour ce faire.
Mise à jour des index :
USE [MaBase];
ALTER DATABASE [MaBase] SET RECOVERY SIMPLE;
GO
DECLARE @T NVARCHAR(261), @I sysname, @SQL VARCHAR(max);
DECLARE C CURSOR
LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR SELECT '[' + c.name +'].['+ o.name +']' AS T, i.name AS I
FROM sys.indexes AS i
INNER JOIN sys.objects AS o
ON o.object_id = i.object_id
INNER JOIN sys.schemas AS c
ON o.schema_id = c.schema_id
WHERE o."type" IN ('U', 'V');
OPEN C;
FETCH C INTO @T, @I;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'ALTER INDEX ' + COALESCE('[' + @I + ']', 'ALL')
+ ' ON ' + @T + ' REBUILD WITH (FILLFACTOR = 90);'
EXEC (@SQL);
FETCH C INTO @T, @I;
END
CLOSE C;
DEALLOCATE C;
GO
ALTER DATABASE [MaBase] SET RECOVERY FULL;
Mise à jour des statistiques :
USE [MaBase];
ALTER DATABASE [MaBase] SET RECOVERY SIMPLE;
GO
DECLARE @T NVARCHAR(261), @S sysname, @SQL VARCHAR(max);
DECLARE C CURSOR
LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR SELECT '[' + c.name +'].['+ o.name +']' AS T, a.name AS S
FROM sys.stats AS a
INNER JOIN sys.objects AS o
ON o.object_id = a.object_id
INNER JOIN sys.schemas AS c
ON o.schema_id = c.schema_id
WHERE o."type" IN ('U', 'V')
AND auto_created = 1
AND user_created = 0;
OPEN C;
FETCH C INTO @T, @S;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'UPDATE STATISTICS ' + @T +' [' + @S + '] WITH FULLSCAN;'
EXEC (@SQL);
FETCH C INTO @T, @S;
END
CLOSE C;
DEALLOCATE C
GO
ALTER DATABASE [MaBase]SET RECOVERY FULL;
--------
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 * * * * *