欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL SERVER 查询与整理索引碎片

程序员文章站 2022-06-27 14:15:31
重建索引 查询索引碎片 ......

重建索引

 1 use database_name;
 2 
 3 declare @tablename varchar(255)
 4 declare @sql nvarchar(500)
 5 declare @fillfactor int
 6 set @fillfactor = 80
 7 declare tablecursor cursor for
 8 select object_schema_name([object_id])+'.['+name+']' as tablename
 9 from sys.tables w
10 open tablecursor
11 fetch next from tablecursor into @tablename
12 while @@fetch_status = 0
13 begin
14 set @sql = 'alter index all on ' + @tablename + ' rebuild with (online=off,fillfactor=80);' --' rebuild with (fillfactor = ' + convert(varchar(3),@fillfactor) + ')'
15 exec (@sql)
16 fetch next from tablecursor into @tablename
17 end
18 close tablecursor
19 deallocate tablecursor
20 go

 查询索引碎片

use database_name;
select dbschemas.[name] as 'schema', 
dbtables.[name] as 'table', 
dbindexes.[name] as 'index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
from sys.dm_db_index_physical_stats (db_id(), null, null, null, null) as indexstats
inner join sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
inner join sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
inner join sys.indexes as dbindexes on dbindexes.[object_id] = indexstats.[object_id]
and indexstats.index_id = dbindexes.index_id
where indexstats.database_id = db_id() and dbindexes.[name] not like 'pk_%'
order by indexstats.avg_fragmentation_in_percent * page_count desc