Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - Программа iNETsHOP - Работа с программой - Увеличение скорости обработки прайсов


http://inetshop.in.ua/index.php?p=showtopic&toid=270&fid=&area=1&print_post=1523
30.10.2015 13:59

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Дефрагментация индексов базы данных
Нужно в базе данных выполнить один из следующих SQL-скриптов:

Дефрагментация индекса
Код
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)
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex;
END;
CLOSE MyCursor;
DEALLOCATE MyCursor;


Перестройка индекса
Код
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 DBREINDEX(@MyTable, @MyIndex, 0)
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex;
END;
CLOSE MyCursor;
DEALLOCATE MyCursor;


Следует отметить, что дефрагментация индекса не влияет на текущую активность пользователей в момент ее проведения. Перестройка индекса накладывает блокировку на любые модификации данных в таблице.

Дефрагментацию диска нужно проводить после дефрагментации/перестройки индексов баз данных.