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 :