SQL 2005 색인 을 다시 만 드 는 저장 과정 sprebuild_index<br>오리지널

회사 가 운영 하 는 사 이 트 는 데이터 가 매우 많 고 사 이 트 는 상호작용 적 이다.3,4 개 월 이 지나 면 색인 이 생 성 되 는 파편 이 매우 많다.많은 페이지 가 정태 적 이지 않 기 때문에 사이트 가 열 리 는 속도 가 느 려 진다.
예전 에는 수 동 으로 오른쪽 클릭 하여 색인 을 다시 만 들 었 지만 색인 이 너무 많아 서 조작 하 는 데 시간 이 걸 렸 습 니 다.색인 은 인터넷 에서 저장 과정 을 찾 았 습 니 다.스스로 정 리 했 습 니 다.실행 할 때 해당 하 는 데이터 베 이 스 를 선택 하고 exec sp 를 실행 해 야 합 니 다.rebuild_index 면 됩 니 다.아래 와 같 습 니 다.

USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[sp_rebuild_index] 
(
  @Rebuild_Fragmentation_Percent smallint = 5  --          > 5%       
)
as
begin
  /*     :
  1.           :  exec sys.sp_MSforeachdb 'use ?;exec sp_rebuild_index'
  2.       :      exec sp_rebuild_index
  */
  
  --                     
  if (db_name() in ('master','model','msdb','tempdb')) return;  
  
  --      (       )     <= 5% ,                
  if not exists(select 1 from sys.dm_db_index_physical_stats(db_id(),null,null,null,null) a where a.index_id>0 and a.avg_fragmentation_in_percent > @Rebuild_Fragmentation_Percent) return
  
  
  print replicate('-',60)+char(13)+char(10)+replicate(' ',14)+N'     '+quotename(db_name())+N'       '+replicate(' ',20)+char(13)+char(10)  
    
  declare @sql nvarchar(2000),@str nvarchar(2000)
  
  declare cur_x cursor for 
    select 'alter index '+quotename(a.name)+' on '+quotename(object_schema_name(a.object_id))+'.'+quotename(object_name(a.object_id))+' rebuild;' as [sql]
        ,N'      :' +quotename(object_schema_name(a.object_id))+'.'+quotename(object_name(a.object_id))+'.'+quotename(a.name) as [str]
      from sys.indexes a
        inner join sys.dm_db_index_physical_stats(db_id(),null,null,null,null) b on b.object_id=a.object_id
          and b.index_id=a.index_id  
      where a.index_id>0  
        and b.avg_fragmentation_in_percent > @Rebuild_Fragmentation_Percent
      order by object_name(a.object_id),a.index_id
      
  open cur_x
  fetch next from cur_x into @sql,@str  
  
  while (@@fetch_status = 0)
  begin
 print @sql
    exec(@sql)
 
    print @str
    fetch next from cur_x into @sql,@str  
      
  end
  close cur_x
  deallocate cur_x 
    
end

당신 은 실행 과정 에서 다음 과 같은 오 류 를 만 날 수 있 습 니 다.
메시지 195,레벨 15,상태 10,과정 sprebuild_index,24 번 째 줄
'object_schema_name'은 식별 할 수 있 는 내장 함수 이름 이 아 닙 니 다.
걱정 하지 마 세 요.SQL Server SP4 패 치 를 설치 하지 않 았 기 때문에 패 치 를 설치 하면 됩 니 다.

좋은 웹페이지 즐겨찾기