请教SQL里怎样使用碎片整理?
请教SQL里怎样使用碎片整理?因为看不懂帮助,所以在这里请教了,一定要一个索引一个索引这样处理的吗?可不可以整个表这样处理?
------解决方案--------------------数据库是以文件的形式保存在磁盘的  所以整理磁盘碎片就行了. 
 不过,数据库中的各表是逻辑组织在数据文件中的,因此数据文件中也可能会产生碎片的问题.       
   可以用导入/导出把数据库导到一个空的新库中.
------解决方案--------------------使用 DBCC SHOWCONTIG 和 DBCC INDEXDEFRAG 对数据库中的索引进行碎片整理 
 下例显示对数据库中碎片数量在声明的阈值之上的所有索引进行碎片整理的简单方法。   
 /*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   
------解决方案--------------------学习...
------解决方案--------------------重新组织索引
------解决方案--------------------关注