sqlserver索引碎片整理

SELECT
object_name(dt.object_id) as 表名,
si.name as 索引名稱 ,
dt.avg_fragmentation_in_percent as 外部碎片,
dt.avg_page_space_used_in_percent as 內部碎片
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('efcoretest'),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
where dt.avg_fragmentation_in_percent > 10 AND dt.avg_page_space_used_in_percent < 75
ORDER BY avg_fragmentation_in_percent DESC
1、當ExternalFragmentation > 10 時說明出現了外部索引碎片。
2、當InternalFragmentation < 75 時說明出現了內部索引碎片。
上面我們分析索引碎片以及判定索引碎片的規則,那麼我們又該如何進行磁盤索引碎片整理呢?
如下有兩種方式
1、重組磁盤索引碎片:
ALTER INDEX ALL ON TableName REORGANIZE
2、重建磁盤索引碎片:
ALTER INDEX ALL ON TableName REBUILD WITH (FILLFACTOR=90,ONLINE=ON)
顯示碎片
declare @table_id int
set @table_id=object_id('TB_GW_ProductPackInToGW')
--執行
dbcc showcontig(@table_id)
--以下是碎片整理
ALTER INDEX ALL ON TB_GW_CheckMaterialH REORGANIZE
ALTER INDEX ALL ON TB_GW_CheckMaterialH REBUILD WITH (FILLFACTOR=90,ONLINE=ON)
來源:https://blog.csdn.net/CXJ0062008/article/details/123572875
碎片產生原因與處理:https://blog.csdn.net/u011334954/article/details/104795285
https://blog.csdn.net/qq_29024215/article/details/90405369
DBCC DBREINDEX( table_name,index_name,fillfactor)棄用,使用alter index all on ....
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章