Analysing index health is a vital part of database maintenance.
Wading through DBCC SHOWCONTIG results is not fun at all.
You probably have something similar but I thought I would share.
--Stub to execute DBCC ShowContig
create proc zzShowContig
as
set nocount on
dbcc showcontig with tableresults , all_indexes
go
--The table to hold the results
create table zzShowContigResults (ObjectName sysname, ObjectID int, IndexName sysname primary key
, IndexID int, Level int, Pages int, Rows int, MiniumumRecordSize int, MaximummRecordSize int
, AverageRecordSize money, ForwardedRecords int, Extents int, ExtentSwitches int
, AverageFreeBytes money, AveragePageDenisty money, ScanDensity money
, BestCount int, ActualCount int, LogicalFragmentation money, ExtentFragmentation money)
go
--Procedure to populate the table
create proc zzPopulateContigData
as
set nocount on
--Destroy existing results
truncate table zzShowContigResults
--Populate
insert zzShowContigResults
EXEC zzShowContig
--remove sys tables
delete zzShowContigResults where left(ObjectName,3) in ('sys', 'dtp')
go
--Run it!
exec zzPopulateContigData
--Play with it!
select *
from zzShowContigResults
where LogicalFragmentation > 0 or ExtentFragmentation > 0
order by [Extents] desc
Print | posted on Wednesday, February 14, 2007 4:17 PM