[转] SQL Server 2005索引碎片整理SQL语句
2023-02-18 15:36:11 时间
/*******************************************************/
/* 功能:SQL Server 2005索引碎片整理 */
/* 逻辑碎片>=30重建索引,<30重新组织索引 */
/* 作者:贾桂军 */
/* 日期:2008年6月11日 */
/*******************************************************/
/***********SQL Server 2005索引碎片整理*****************/
/**使用方法:将需要整理索引碎片的数据库设置为当前数据库**/
set nocount on
--使用游标重新组织指定库中的索引,消除索引碎片
--R_T层游标取出当前数据库所有表
declare R_T cursor
for select name from sys.tables
declare @T varchar(50)
open r_t
fetch next from r_t into @t
while @@fetch_status=0
begin
--R_index游标判断指定表索引碎片情况并优化
declare R_Index cursor
for select t.name,i.name,s.avg_fragmentation_in_percent from sys.tables t
join sys.indexes i on i.object_id=t.object_id
join sys.dm_db_index_physical_stats(db_id(),object_id(@T),null,null,'limited') s
on s.object_id=i.object_id and s.index_id=i.index_id
declare @TName varchar(50),@IName varchar(50),@avg int,@str varchar(500)
open r_index
fetch next from r_index into @TName,@Iname,@avg
while @@fetch_status=0
begin
if @avg>=30 --如果碎片大于30,重建索引
begin
set @str='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' rebuild'
end
else --如果碎片小于30,重新组织索引
begin
set @STR='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' reorganize'
end
print @str
exec (@str) --执行
fetch next from r_index into @TName,@Iname,@avg
end
--结束r_index游标
close r_index
deallocate r_index
fetch next from r_t into @t
end
--结束R_T游标
close r_t
deallocate r_t
set nocount off
/*
--查看指定表的索引情况
select t.name,i.name,s.avg_fragmentation_in_percent from sys.tables t
join sys.indexes i on i.object_id=t.object_id
join sys.dm_db_index_physical_stats(db_id(),object_id('t2'),null,null,'limited') s
on s.object_id=i.object_id and s.index_id=i.index_id
*/
/* 功能:SQL Server 2005索引碎片整理 */
/* 逻辑碎片>=30重建索引,<30重新组织索引 */
/* 作者:贾桂军 */
/* 日期:2008年6月11日 */
/*******************************************************/
/***********SQL Server 2005索引碎片整理*****************/
/**使用方法:将需要整理索引碎片的数据库设置为当前数据库**/
set nocount on
--使用游标重新组织指定库中的索引,消除索引碎片
--R_T层游标取出当前数据库所有表
declare R_T cursor
for select name from sys.tables
declare @T varchar(50)
open r_t
fetch next from r_t into @t
while @@fetch_status=0
begin
--R_index游标判断指定表索引碎片情况并优化
declare R_Index cursor
for select t.name,i.name,s.avg_fragmentation_in_percent from sys.tables t
join sys.indexes i on i.object_id=t.object_id
join sys.dm_db_index_physical_stats(db_id(),object_id(@T),null,null,'limited') s
on s.object_id=i.object_id and s.index_id=i.index_id
declare @TName varchar(50),@IName varchar(50),@avg int,@str varchar(500)
open r_index
fetch next from r_index into @TName,@Iname,@avg
while @@fetch_status=0
begin
if @avg>=30 --如果碎片大于30,重建索引
begin
set @str='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' rebuild'
end
else --如果碎片小于30,重新组织索引
begin
set @STR='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' reorganize'
end
print @str
exec (@str) --执行
fetch next from r_index into @TName,@Iname,@avg
end
--结束r_index游标
close r_index
deallocate r_index
fetch next from r_t into @t
end
--结束R_T游标
close r_t
deallocate r_t
set nocount off
/*
--查看指定表的索引情况
select t.name,i.name,s.avg_fragmentation_in_percent from sys.tables t
join sys.indexes i on i.object_id=t.object_id
join sys.dm_db_index_physical_stats(db_id(),object_id('t2'),null,null,'limited') s
on s.object_id=i.object_id and s.index_id=i.index_id
*/
相关文章
- [MySQL]select和where子句优化
- [日常] nginx的错误日志error_log设置
- [日常] nginx记录post数据
- [redis] Redis的介绍
- [PHP] PHP在CLI环境下的错误日志
- [PHP] 2018年终总结
- [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段
- [日常] DNS解析概述
- [PHP] swoole的安装和简单使用
- [PHP] PHP闭包(closures)
- [PHP]代码执行和生命周期
- [PHP] 理解依赖注入
- [日常]总结2016年7月入职至2016年7月26号微盘所遇bug
- [PHP] 多进程通信-消息队列使用
- [PHP] PHP多进程处理tcp连接
- [PHP]PHP rpc框架hprose测试
- [日常] nginx与负载均衡策略
- [日常]nginx与网络事件模型
- [日常] HTTP的缓存
- [日常] HTTP连接管理