SQL Server : quand reconstruire vos indexes ?

SQL Server : quand reconstruire vos indexes ?

Plus votre base de données va être utilisée plus vos indexes risque d’être fragmentés, une fragmentation importante peut diminuer fortement les performances de vos requêtes et ralentir l’ensemble de votre application.

Dans cet article nous verrons comment :

  • diagnostiquer la fragmentations des indexes de nos tables
  • réorganiser / reconstruire un index

Diagnostiquer le niveau de fragmentation

Avant de reconstruire les indexes il faut identifier quels sont ceux qui sont fragmentés, pour se faire nous allons interroger notre base de données pour qu’elle puisse nous donner le niveau de fragmentation de chaque index.

SELECT avg_fragmentation_in_percent AS FragmentationInPercent,
OBJECT_SCHEMA_NAME  (Stats.object_id) AS TableName,
OBJECT_NAME (Stats.object_id) AS TableName,
Indexes.name
FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('dbo.T_CLIENT_CLI') , NULL, NULL , 'LIMITED') AS Stats
INNER JOIN sys.indexes AS Indexes ON Stats.object_id = Indexes.object_id AND Stats.index_id = Indexes.index_id
ORDER BY avg_fragmentation_in_percent DESC

Après avoir exécuté la requête vous devriez un résultat sous cette forme :

La documentation officielle estime qu’un index fragmenter à plus de 30 % doit être “reconstruit” tandis qu’un index qui a une fragmentation entre 5% et 30% peut être uniquement “réorganisé”.

Attention : il est contreproductif reconstruire des indexes

Réorganiser les index d’une table

Réorganiser les index d’une table :

ALTER INDEX ALL ON [NomDuSchema].[NomDeLaTable]
REORGANIZE ;
GO

Réorganiser l’index d’une table :

ALTER INDEX IX_MonIndex
ON [NomDuSchema].[NomDeLaTable]
REORGANIZE ;

GO

Reconstruire les index d’une table

Reconstruire les index d’une table :

ALTER INDEX ALL ON [NomDuSchema].[NomDeLaTable]
REBUILD ;
GO

Reconstruire l’index d’une table :

ALTER INDEX IX_MonIndex
ON [NomDuSchema].[NomDeLaTable]
REBUILD ;

GO

Happy coding.

Pour aller plus loin :

Laisser un commentaire

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

Pin It on Pinterest