Reconstruction de tous les index d’une base

En environnement de développement (en espérant que vous ne le faites pas en production …), il arrive assez souvent de lancer des compactages (SHRINK) de bases de données. Mais ce type d’action a tendance à fragmenter tous les index, chose qu’il convient de réparer rapidement si l’on souhaite garder des performances acceptables.

Or il n’existe pas d’instruction Transact-SQL ou de commande (menu) sous SSMS permettant de reconstruire rapidement tous les index d’une base. Voici donc un script réalisant cela (avec accessoirement mise à jour complète des statistiques en fin de processus) :

declare @requete nvarchar(max)=N''

select @requete+='ALTER INDEX ALL ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ' REBUILD;'
from sys.tables t
	join sys.schemas s on s.schema_id=t.schema_id
where t.is_memory_optimized=0

exec sp_executesql @requete

exec sp_updatestats

Un oeil aguerri pourra constater que ce filtre exclut volontairement les tables « In-Memory » de SQL Server 2014, étant donné qu’il n’est pas utile de défragmenter ce type de tables.

Vite réalisé, mais bien utile lorsque l’on n’a pas la possibilité de passer par un plan de maintenance ou lorsqu’il n’est pas nécessaire de chercher à s’appuyer sur les taux de fragmentation comme dans un script standard de maintenance

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Contrôle de sécurité * Délai de réponse expiré. Merci de compléter à nouveau le code de contrôle.