我有一个脚本确定要重建的索引。
select
'alter index ' + name + ' on ' + @dbname + '.dbo.' + OBJECT_NAME(a.object_id) + ' rebuild;'
from sys.dm_db_index_physical_stats (DB_ID(@dbname), NULL, NULL, NULL, NULL) AS a
inner join sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
where avg_fragmentation_in_percent > 30
其中,例如生成:
alter index FooIndex on FooDb.dbo.FooTable rebuild;
但是在我执行 alter 语句后,索引仍然有很高的碎片值,如果我再次执行它,它不会降低(50%)。任何关于可能出错的输入都将受到高度赞赏。
更新:我手动增加了数据库的大小,它设法降低了一些索引的碎片,但仍然不是全部。还有几个50%左右。
//丹尼尔