DBCC SHOWCONTIG 和 DBCC INDEXDEFRAG 对数据库中的索引进行碎片整理

原创 2007年10月08日 08:55:00

/*Perform a 'USE <database name>' to select the database in which to run the script.*/
-- Declare variables
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr   VARCHAR (255)
DECLARE @objectid  INT
DECLARE @indexid   INT
DECLARE @frag      DECIMAL
DECLARE @maxfrag   DECIMAL

-- Decide on the maximum fragmentation to allow
SELECT @maxfrag = 30.0

-- Declare cursor
DECLARE tables CURSOR FOR
   SELECT TABLE_NAME
   FROM INFORMATION_SCHEMA.TABLES
   WHERE TABLE_TYPE = 'BASE TABLE'

-- Create the table
CREATE TABLE #fraglist (
   ObjectName CHAR (255),
   ObjectId INT,
   IndexName CHAR (255),
   IndexId INT,
   Lvl INT,
   CountPages INT,
   CountRows INT,
   MinRecSize INT,
   MaxRecSize INT,
   AvgRecSize INT,
   ForRecCount INT,
   Extents INT,
   ExtentSwitches INT,
   AvgFreeBytes INT,
   AvgPageDensity INT,
   ScanDensity DECIMAL,
   BestCount INT,
   ActualCount INT,
   LogicalFrag DECIMAL,
   ExtentFrag DECIMAL)

-- Open the cursor
OPEN tables

-- Loop through all the tables in the database
FETCH NEXT FROM tables
   INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN
-- Do the showcontig of all indexes of the table
   INSERT INTO #fraglist
   EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''')
      WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
   FETCH NEXT
      FROM tables
      INTO @tablename
END

-- Close and deallocate the cursor
CLOSE tables
DEALLOCATE tables

-- Declare cursor for list of indexes to be defragged
DECLARE indexes CURSOR FOR
   SELECT ObjectName, ObjectId, IndexId, LogicalFrag
   FROM #fraglist
   WHERE LogicalFrag >= @maxfrag
      AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0

-- Open the cursor
OPEN indexes

-- loop through the indexes
FETCH NEXT
   FROM indexes
   INTO @tablename, @objectid, @indexid, @frag

WHILE @@FETCH_STATUS = 0
BEGIN
   PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
      ' + RTRIM(@indexid) + ') - fragmentation currently '
       + RTRIM(CONVERT(varchar(15),@frag)) + '%'
   SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
       ' + RTRIM(@indexid) + ')'
   EXEC (@execstr)

   FETCH NEXT
      FROM indexes
      INTO @tablename, @objectid, @indexid, @frag
END

-- Close and deallocate the cursor
CLOSE indexes
DEALLOCATE indexes

-- Delete the temporary table
DROP TABLE #fraglist
GO

 

 

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC INDEXDEFRAG指定表或视图的索引碎片整理

指定表或视图的索引碎片整理。 重要提示 后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在...
  • luoyanqing119
  • luoyanqing119
  • 2013年12月26日 10:04
  • 1996

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHOWCONTIG显示指定的表或视图的数据和索引的碎片信息

显示指定的表或视图的数据和索引的碎片信息。 重要提示 后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功...
  • luoyanqing119
  • luoyanqing119
  • 2014年01月03日 11:54
  • 1436

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKDB通过执行下列操作检查指定数据库中所有对象的逻辑和物理完整性

通过执行下列操作检查指定数据库中所有对象的逻辑和物理完整性: 对数据库运行 DBCC CHECKALLOC。 对数据库中的每个表和视图运行 DBCC CHECKTABLE。 ...
  • luoyanqing119
  • luoyanqing119
  • 2013年12月26日 09:08
  • 2307

DBCC SHOWCONTIG 索引碎片查询

显示指定的表的数据和索引的碎片信息。 语法 DBCC SHOWCONTIG     [    ( { table_name | table_id | view_name |view_id } ...
  • wangjunhe
  • wangjunhe
  • 2012年02月02日 13:33
  • 2395

通过DBCC整理Sqlserver数据库表索引碎片

昨天检查了一张效率极慢的表,两年多没有维护,逻辑扫描碎片高达99.81%,于是开始对这个表进行重点跟踪和记录日志。今天用DBCC SHOWCONTIG WITH TABLERESULTS  命令检查了...
  • fengyarongaa
  • fengyarongaa
  • 2012年12月19日 15:05
  • 5280

SqlServer数据库碎片整理——BCC SHOWCONTIG

SQLServer提供了一个数据库命令——DBCC SHOWCONTIG——来确定一个指定的表或索引是否有碎片。  示例: 显示数据库里所有索引的碎片信息 DBCC SHOWCONTIG WIT...
  • u011088260
  • u011088260
  • 2018年01月16日 15:55
  • 23

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHOWCONTIG显示指定的表或视图的数据和索引的碎片信息

显示指定的表或视图的数据和索引的碎片信息。 重要提示 后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功...
  • luoyanqing119
  • luoyanqing119
  • 2014年01月03日 11:54
  • 1436

重建索引例子 DBCC dbreindex dbcc showcontig

  • 2010年11月07日 19:36
  • 8KB
  • 下载

SQL Server 2005完结篇系列之五:使用DBCC命令来进行数据库的维护及性能调节

  • 2008年09月08日 18:00
  • 17.07MB
  • 下载

MSSQL数据库表索引碎片整理优化性能

原文:点击打开链接 在SQLServer数据库,通过DBCC ShowContig或DBCC ShowContig(表名)检查索引碎片情况,指导我们对其进行定时重建整理。 运行结果如下: ...
  • yenange
  • yenange
  • 2013年09月09日 16:17
  • 810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DBCC SHOWCONTIG 和 DBCC INDEXDEFRAG 对数据库中的索引进行碎片整理
举报原因:
原因补充:

(最多只允许输入30个字)