日期:2014-05-17  浏览次数:20503 次

怎么对SQL Server里怎样整理索引碎片
帮助看的不是很懂,只能一个索引一个索引这样处理的吗?可不可以整个表这样处理?
------最佳解决方案--------------------
/******************************************************************************************
 * 使用   DBCC   SHOWCONTIG   和   DBCC   INDEXDEFRAG   对数据库中的索引进行碎片整理
 * 下例显示对数据库中碎片数量在声明的阈值之上的所有索引进行碎片整理的简单方法。
 ******************************************************************************************/

a
/*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 '
         )
  &