Сегодня рассмотрим несложный SQL скрипт для перестройки всех индексов в базе данных:
USE DatabaseName
GO
DECLARE @fillFactor int
-- configuration set fillfactor for indexes
SET @fillFactor = 90
DECLARE @dbTables TABLE
(
ID INT IDENTITY(1,1) NOT NULL,
TABLE_NAME VARCHAR(128) NOT NULL
)
INSERT INTO @dbTables
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name FROM sys.tables
WHERE type_desc = 'USER_TABLE'
DECLARE @tableCount int
DECLARE @tableName VARCHAR(128)
DECLARE @sql VARCHAR(200)
SELECT @tableCount = COUNT(*) FROM @dbTables
WHILE (@tableCount>0)
BEGIN
SELECT TOP 1 @tableName = TABLE_NAME from @dbTables
SET @sql = 'ALTER INDEX ALL ON ' + @tableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillFactor) + ')'
PRINT @sql
EXEC(@sql)
DELETE FROM @dbTables
WHERE id=(SELECT TOP 1 ID FROM @dbTables)
SET @tableCount=@tableCount-1
END
--fix some configuration issue
/*
sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'fill factor', 90
GO
RECONFIGURE WITH OVERRIDE
GO
*/
Естественно что использовать данную процедуру необходимо производить осторожно, так как это вызывает дополнительную (иногда не слабую) нагрузку на сервер. Также иногда необходима тонкая настройка индексов с учетом FILLFACTOR, DATA_COMPRESSION, etc.
SQL скрипт - Rebuild All Index in Database 2005-2008