Для переиндексации таблиц можно например использовать следующий скрипт
Код
DECLARE @MyTable varchar(120);
DECLARE @MyIndex varchar(120);
DECLARE MyCursor CURSOR FOR
SELECT o.name, i.name
FROM sysobjects o INNER JOIN sysindexes i ON o.id = i.id
WHERE (o.xtype = 'U') AND (INDEXPROPERTY(i.id, i.name, 'isStatistics') = 0) AND (i.dpages > 0)
and not i.name is null
ORDER BY o.name, i.indid;
OPEN MyCursor;
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex;
WHILE @@FETCH_STATUS=0
BEGIN
PRINT 'Дефрагментация индекса '+@MyIndex+' из таблицы '+@MyTable
--DBCC INDEXDEFRAG (0,@MyTable,@MyIndex)
DBCC DBREINDEX(@MyTable, @MyIndex, 0)
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex;
END;
CLOSE MyCursor;
DEALLOCATE MyCursor;
Следует отметить, что команда INDEXDEFRAG устраняет логическую дефрагментацию, а DBREINDEX - пересоздаёт индексы заново. DBREINDEX - несомненно лучше, но она блокирует пользователей, в то время как выполнение INDEXDEFRAG происходит в фоновом режиме незаметно для пользователей базы данных.
|