SQL SERVER 查询与整理索引碎片

本文提供了一种使用SQL Server的T-SQL脚本进行索引重建和查询索引碎片的方法,通过设置填充因子和在线状态,以提高数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重建索引

 1 use DATABASE_NAME;
 2 
 3 DECLARE @TableName VARCHAR(255)
 4 DECLARE @sql NVARCHAR(500)
 5 DECLARE @fillfactor INT
 6 SET @fillfactor = 80
 7 DECLARE TableCursor CURSOR FOR
 8 SELECT OBJECT_SCHEMA_NAME([object_id])+'.['+name+']' AS TableName
 9 FROM sys.tables w
10 OPEN TableCursor
11 FETCH NEXT FROM TableCursor INTO @TableName
12 WHILE @@FETCH_STATUS = 0
13 BEGIN
14 SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (ONLINE=off,FILLFACTOR=80);' --' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
15 exec (@sql)
16 FETCH NEXT FROM TableCursor INTO @TableName
17 END
18 CLOSE TableCursor
19 DEALLOCATE TableCursor
20 GO

 查询索引碎片

use DATABASE_NAME;
SELECT dbschemas.[name] as 'Schema', 
dbtables.[name] as 'Table', 
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID() and dbindexes.[name] not like 'pk_%'
ORDER BY indexstats.avg_fragmentation_in_percent * page_count desc

 

转载于:https://www.cnblogs.com/lionetchen/p/9783515.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值