Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - Программа iNETsHOP - Техподдержка - Индексирование БД


http://inetshop.in.ua/index.php?p=showtopic&toid=186&pp=15&page=1&area=1
19.09.2012 15:50

dimon


Пользователь iNETsHOP

Количество сообщений   10
Зарегистрирован:   23-05-2009, 13:39:17
Индексирование БД
Добрый день!
Хотелось бы периодически индексировать базу данных.
Как это делать правильно?

19.09.2012 16:37

support


Support


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

Код

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 происходит в фоновом режиме незаметно для пользователей базы данных.