重組索引(帶統計索引重組時間)

2022-02-27 15:43:04 字數 2557 閱讀 5219

由於在工作中,系統重組索引耗時太久,排查不出問題的根源,故此手工寫了如下**。

/****** object:  table [dbo].[reorganizelog]    script date: 06/20/2013 16:09:27 *****

*/set ansi_nulls on

goset quoted_identifier on

goset ansi_padding on

gocreate

table

[dbo

].[reorganizelog]([

pkid][

int]

identity(1,1) not

null,

[name][

varchar

](200) null,

[tablename][

varchar

](200) null,

[begintime][

datetime

]null,

[endtime][

datetime

]null,

[timespan][

time

](7) null,

constraint

[pk_reorganizelog

]primary

keyclustered([

pkid

]asc

)with (pad_index  =

off, statistics_norecompute  =

off, ignore_dup_key =

off, allow_row_locks  =

on, allow_page_locks  =

on) on

[primary

]) on

[primary]go

set ansi_padding off

go接下來,利用游標對所有索引進行遍歷,逐個重組,也可以改成逐個重建,用到的自己動手修改

usedbname;

godeclare

@indexname

varchar(200), @tablename

varchar(100);

declare allindex cursor

forselect  a.name ,

c.name 

from    sysindexes a

join sysindexkeys b on a.id = b.id

and a.indid = b.indid

join sysobjects c on b.id = c.id

where   a.indid not

in ( 0, 255 )  

and   c.xtype='u

'order

byc.name ,

a.name 

open allindex;

fetch

next

from allindex into

@indexname, @tablename;

while

@@fetch_status=0

begin

--concatenate and display the current values in the variables.

print

@indexname+'

,'+@tablename

declare

@begintime

datetime,@endtime

datetime,@timespan time,@sql

varchar(1000)

set@begintime

=getdate()

set@sql='

alter index '+

@indexname+'

on '

+@tablename+'

reorganize with ( lob_compaction = on )

'exec(@sql)

set@endtime

=getdate()

set@timespan

=@endtime

-@begintime

insert

into

[yeegotemp

].[dbo

].[reorganizelog

]([name

],[tablename

],[begintime

],[endtime

],[timespan

])values(@indexname,@tablename,@begintime,@endtime,@timespan)

fetch

next

from allindex into

@indexname, @tablename;

endclose allindex;

deallocate allindex;

go通過以上**即可以實現。

在此以作備忘之用。

維護索引 通過重組索引提高效能

如果碎片程度小於30 建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,並且降低cpu的資源。總得來說,重組會清空當前的b tree,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在10 以下,那一般沒...

維護索引 通過重組索引提高效能

如果碎片程度小於30 建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,並且降低cpu的資源。總得來說,重組會清空當前的b tree,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在10 以下,那一般沒...

第十章 維護索引(4) 通過重組索引提高效能

原文 第十章 維護索引 4 通過重組索引提高效能 如果碎片程度小於30 建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,並且降低cpu的資源。總得來說,重組會清空當前的b tree,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。為了了解是否有必要重組索引...