데이터베이스 재인덱싱(MSSQL)
먼저 아래를 실행하여 활성 데이터베이스의 조각화 수준을 확인합니다.
declare @fragmentation float
set @fragmentation = 20
SELECT
S.name as [Schema],
T.name as [Table],
I.name as [Index],
DDIPS.avg_fragmentation_in_percent
FROM
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS DDIPS
INNER JOIN
sys.tables T with (nolock)
on
(
T.object_id = DDIPS.object_id
)
INNER JOIN
sys.schemas S with (nolock)
on
(
T.schema_id = S.schema_id
)
INNER JOIN
sys.indexes I with (nolock)
ON
(
I.object_id = DDIPS.object_id AND
DDIPS.index_id = I.index_id
)
WHERE
DDIPS.database_id = DB_ID() and
I.name is not null AND
DDIPS.avg_fragmentation_in_percent > @fragmentation
ORDER BY
DDIPS.avg_fragmentation_in_percent desc
다음을 실행하여 데이터베이스 재색인을 실행합니다.
declare @fragmentation float
set @fragmentation = 20
declare @schema_name sysname,
@table_name sysname,
@index_name sysname
DECLARE cursor_tables
CURSOR FOR
SELECT
S.name as 'Schema',
T.name as 'Table',
I.name as 'Index'
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS DDIPS
INNER JOIN sys.tables T with (nolock) on (T.object_id = DDIPS.object_id)
INNER JOIN sys.schemas S with (nolock) on (T.schema_id = S.schema_id)
INNER JOIN sys.indexes I with (nolock) ON (I.object_id = DDIPS.object_id AND DDIPS.index_id = I.index_id)
WHERE
DDIPS.database_id = DB_ID() and
I.name is not null AND
DDIPS.avg_fragmentation_in_percent > @fragmentation
ORDER BY
DDIPS.avg_fragmentation_in_percent desc
open cursor_tables
fetch next from cursor_tables
into @schema_name, @table_name, @index_name
while @@fetch_status = 0
begin
exec
(
'
ALTER INDEX [' + @index_name + '] ON [' + @schema_name + '].[' + @table_name + ']
REBUILD WITH(FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON)
'
)
exec
(
'
ALTER INDEX [' + @index_name + '] ON [' + @schema_name + '].[' + @table_name + ']
REORGANIZE
'
)
fetch next from cursor_tables
into @schema_name, @table_name, @index_name
end
close cursor_tables
deallocate cursor_tables
마지막으로 다음을 실행하여 통계를 업데이트합니다.
EXEC sp_updatestats
주로 개인적인 참조를 위해 작성된 기사. 물론 이러한 스크립트를 개선할 수 있는 몇 가지 방법이 있지만 고객에게 스크립트를 제공할 때 가장 간단한 솔루션이 가장 좋은 경우가 많습니다.
Reference
이 문제에 관하여(데이터베이스 재인덱싱(MSSQL)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mikekennedydev/database-reindexing-mssql-2jni텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)