Сегодня рассмотрим несложный SQL скрипт для перестройки всех индексов в базе данных:
USE DatabaseNameGODECLARE @fillFactor int
-- configuration set fillfactor for indexesSET @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)BEGINSELECT 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-1END--fix some configuration issue/*
sp_configure 'show advanced options', 1GORECONFIGURE WITH OVERRIDE
GOsp_configure 'fill factor', 90GORECONFIGURE WITH OVERRIDE
GO */
Естественно что использовать данную процедуру необходимо производить осторожно, так как это вызывает дополнительную (иногда не слабую) нагрузку на сервер. Также иногда необходима тонкая настройка индексов с учетом FILLFACTOR, DATA_COMPRESSION, etc.
SQL скрипт - Rebuild All Index in Database 2005-2008
0 коммент.:
Отправить комментарий