Чтобы сохранить низкий уровень фрагментации индексов, вам следует время от времени реорганизовывать индексы на MSSQL. В приведенной ниже ссылке Microsoft описывает, как вы можете проверить фрагментацию индексов в таблицах в MSSQL, а затем как вы можете реорганизовать (перестроить) индексы, чтобы уменьшить процент фрагментации:
Было бы неплохо иметь процедуру, которая автоматически реорганизует индексы в случае, если процент фрагментации достигает определенного порога. Следующая процедура делает это:
create procedure ui_reorganize_indices @db_name nvarchar(127), @table_name nvarchar(127)
as
begin
declare @avg_fragmentation_in_percent float
declare @index_name nvarchar(127)
declare @alter_index_command nvarchar(256)
declare rebuild_index_cursor cursor local for
select name AS IndedxName, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats
(DB_ID (@db_name)
, OBJECT_ID(@table_name)
, NULL
, NULL
, NULL) AS a
INNER JOIN sys.indexes AS b
ON a.object_id = b.object_id
AND a.index_id = b.index_id
and avg_fragmentation_in_percent > 20.0;
open rebuild_index_cursor
fetch next from rebuild_index_cursor into @index_name, @avg_fragmentation_in_percent
while @@fetch_status = 0
begin
select @alter_index_command = formatmessage('alter index %s on %s REORGANIZE', @index_name, @table_name)
print @alter_index_command
exec (@alter_index_command)
fetch next from rebuild_index_cursor into @index_name, @avg_fragmentation_in_percent
end
close rebuild_index_cursor
end
go
Ребята, вы прибегали к подобным процедурам для улучшения своих показателей?
