SQLServer – Comment réindexer une base

Lundi 02 janvier, 2012 at 11:01 / 0 comment

sqlserver logo

Le script qui suit est issu de la FAQ du site Developpez

Voici la description faite sur le site par HULK

La gestion des index par SQL Server peut entraîner la fragmentation de ceux-ci et une dégradation des performances. Si le volume d’informations de votre base évolue beaucoup, il est nécessaire de réindexer votre base. Plus votre base change, plus les index perdent en efficacité, il faut donc les recréer. On peut reconstruire les index avec la commande DBCC REINDEX.

Le seul truc pour moi c’est que le script ne prenait pas en compte les schémas, voici donc la modification du script avec la prise en compte des schémas.

DECLARE @schemaName sysname
DECLARE @table_name sysname
DECLARE @schemaTable varchar(max)
DECLARE @TSQL nvarchar(4000)
DECLARE @Err int
DECLARE @Mess varchar(400)
	SET @Mess = 'Début réindexation'
	RAISERROR(@Mess, 10, 1) WITH LOG
	 --Modif de la requete Hotfirenet
	DECLARE table_list CURSOR FAST_FORWARD FOR SELECT sch.name as schemaName, tab.name as nom FROM sys.tables as tab  INNER JOIN sys.schemas as sch ON tab.schema_id = sch.schema_id WHERE type = 'u'
	 --Fin de modif
	OPEN table_list
	FETCH NEXT FROM table_list INTO @schemaName, @table_name
	WHILE @@fetch_status = 0
		BEGIN
			--Modif Hotfirenet
			SET @schemaTable = '['+@schemaName+'].['+@table_name+']'
			--Fin de modif
			SET @TSQL = N'DBCC DBREINDEX("' + @schemaTable + N'")' 

			EXECUTE sp_executesql @TSQL
			--SELECT @TSQL
			SET @Err = @@error
			IF (@Err != 0)
				BEGIN
					SET @Mess = 'Echec réindexation table ' + @schemaTable + ' suite erreur ' + CONVERT(varchar, @Err)
					RAISERROR(@Mess, 16, 1) WITH LOG
				END

			FETCH NEXT FROM table_list INTO @schemaName, @table_name
		END
	CLOSE table_list
	DEALLOCATE table_list
	SET @Mess = 'Fin réindexation'
	RAISERROR(@Mess, 10, 1) WITH LOG
	GO
Tags: , ,

Related Posts

SQL – Injection SQL ok mais comment l’éviter avec MS SQL avec PHP?
Développement
HowTo – Apache, PHP et Microsoft SQL Server
HowTo – Apache, PHP et Microsoft SQL Server
Développement

There are no comments yet, add one below.

Leave a Comment


Laisser un commentaire

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

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>