如何在SQL Server中为索引设置Fill Factor为0?
SQL Server索引Fill Factor设为0的快捷方案
方案一:官方支持的批量重建法(推荐)
直接利用ALTER INDEX结合服务器默认Fill Factor(已设为0)来批量重建索引,无需删除索引,操作安全且高效:
DECLARE @SQL NVARCHAR(MAX) = ''; SELECT @SQL += 'ALTER INDEX ' + QUOTENAME(name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(OBJECT_NAME(object_id)) + ' REBUILD WITH (FILLFACTOR = DEFAULT);' + CHAR(13) + CHAR(10) FROM sys.indexes WHERE fill_factor = 100 AND type_desc IN ('NONCLUSTERED_INDEX', 'CLUSTERED_INDEX'); EXEC sp_executesql @SQL;
- 原理:
FILLFACTOR = DEFAULT会调用服务器级默认的Fill Factor值(你已设为0),重建后索引的Fill Factor会被记录为0,而非100。 - 优势:属于SQL Server官方支持的操作,无系统表修改风险,适合生产环境。
方案二:直接修改系统目录视图(谨慎使用)
如果不想重建索引,可以直接修改系统表sys.indexes来更新Fill Factor值,但仅建议在测试环境或紧急场景下使用,因为这属于未公开的操作,可能影响元数据稳定性:
- 切换到目标数据库:
USE YourDatabaseName; - 批量更新所有Fill Factor为100的索引:
UPDATE sys.indexes SET fill_factor = 0 WHERE fill_factor = 100 AND type_desc IN ('NONCLUSTERED_INDEX', 'CLUSTERED_INDEX'); - 刷新元数据(可选,确保修改生效):
DBCC FREEPROCCACHE; DBCC DROPCLEANBUFFERS;
- 注意:操作前必须做好数据库全量备份,生产环境使用前务必充分测试。
内容的提问来源于stack exchange,提问作者bornfromanegg
相关产品推荐
相关产品推荐

