标签归档:索引碎片整理

mssql sqlserver 重新生成索引及重新组织索引区别说明


摘要:
下文将详解重新生成索引和重新组织索引的区别,如下所示:



一、重新组织索引:

重新组织索引语法:
alter index [索引名] on [表名] reorganize
————————————————————-
重新组织索引对索引物理存储进行重新排序。
使用索引中的各数据进行依次匹配,从而使索引依次排序起到减少索引内碎片不连续的现象。
重新组织索引,索引将在自身页内重新组织,不会重新分配新页。
重新组织索引,会压缩索引所占用的空间。
重新组织索引,自动联机执行。该进程不会长期阻塞,不会阻止查询和更新操作。

二、重新生成索引:

重新生成索引语法:
alter index [索引名] on [表名] rebuild
————————————————————
重新生成索引将删除原索引,再新建一个新的索引。
重新生成索引会根据需要重新分配页,减少所请求的页数,可提高磁盘性能。

mssql sqlserver索引碎片的整理方法分享


摘要:
下文记载一次索引碎片的整理方法分享,供大家使用
实验环境:sqlserver 2008 R2



索引碎片的危害:
mssql sqlserver存在大量的索引碎片会使用索引失效。

下文将讲述索引碎片整理的几种方法,供大家使用,如下所示:

  ---索引碎片的查看方法:
     SELECT object_name(dt.object_id) Tablename,si.name IndexName,
    dt.avg_fragmentation_in_percent AS ExternalFragmentation,
    dt.avg_page_space_used_in_percent AS InternalFragmentation FROM
     ( SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
    FROM sys.dm_db_index_physical_stats (db_id(‘数据库名’),null,null,null,’DETAILED’ )
    WHERE index_id <> 0) AS dt INNER JOIN sys.indexes si ON si.object_id=dt.object_id
    AND si.index_id=dt.index_id
    AND dt.avg_fragmentation_in_percent>10 AND
    dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent DESC
 

----------------------------------------------------
索引碎片清理的方法分享:
方法1:
在索引上点击右键--"重新生成"或"重新组织",如下图所示:

mssql_sqlserver_右键重新生成及组织索引

mssql_sqlserver_右键重新生成及组织索引


方法2:
删除索引-->然后采用索引脚本重新建立索引
方法3:
使用脚本重建索引
ALTER INDEX [索引名称] ON [表名称] REBUILD
方法4:
使用脚本重建组织索引
ALTER INDEX [索引名称] ON [表名称] REORGANIZE


索引碎片整理注意事项:
索引整理时,会锁表,所以需避开业务高峰期进行此项数据库维护操作