This code displays the fragmentation on all indexes in the current database. (It excludes empty tables.)
-- SQL Server 2005+. Show index fragmentation on all tables on current database.
set nocount on
declare @DbId smallint
set @DbId = db_id()
select quotename(db_name()) as DatabaseName
, quotename(object_name(ips.object_id)) as TableName
, quotename(i.name) as IndexName
, ips.page_count as PageCount
, ips.page_count * 8 / 1024 as IndexSizeMB
, ips.fragment_count as FragCount
, ips.avg_fragmentation_in_percent as AvgFrag
, ips.index_type_desc as IndexType
from sys.dm_db_index_physical_stats(@DbId, NULL, NULL, NULL, NULL) ips
join sys.indexes i
on ips.object_id = i.object_id
and ips.index_id = i.index_id
where i.index_id <> 0
and ips.page_count > 0
order by FragCount desc
0 comments:
Post a Comment