博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重组索引(带统计索引重组时间)
阅读量:4472 次
发布时间:2019-06-08

本文共 1917 字,大约阅读时间需要 6 分钟。

        由于在工作中,系统重组索引耗时太久,排查不出问题的根源,故此手工写了如下代码。

首先,建立如下日志表

        /****** Object:  Table [dbo].[ReorganizeLog]    Script Date: 06/20/2013 16:09:27 ******/

SET ANSI_NULLS 
ON
GO
SET QUOTED_IDENTIFIER 
ON
GO
SET ANSI_PADDING 
ON
GO
CREATE 
TABLE 
[
dbo
].
[
ReorganizeLog
](
    
[
PKID
] 
[
int
] 
IDENTITY(
1,
1
NOT 
NULL,
    
[
Name
] 
[
varchar
](
200
NULL,
    
[
TableName
] 
[
varchar
](
200
NULL,
    
[
BeginTime
] 
[
datetime
] 
NULL,
    
[
EndTime
] 
[
datetime
] 
NULL,
    
[
TimeSpan
] 
[
time
](
7
NULL,
 
CONSTRAINT 
[
PK_ReorganizeLog
] 
PRIMARY 
KEY 
CLUSTERED 
(
    
[
PKID
] 
ASC
)
WITH (PAD_INDEX  
= 
OFF, STATISTICS_NORECOMPUTE  
= 
OFF, IGNORE_DUP_KEY 
= 
OFF, ALLOW_ROW_LOCKS  
= 
ON, ALLOW_PAGE_LOCKS  
= 
ON
ON 
[
PRIMARY
]
ON 
[
PRIMARY
]
GO
SET ANSI_PADDING 
OFF

GO

       接下来,利用游标对所有索引进行遍历,逐个重组,也可以改成逐个重建,用到的自己动手修改

       USE DbName;

GO
DECLARE 
@indexName 
varchar(
200), 
@tableName 
varchar(
100);
DECLARE allIndex 
CURSOR 
FOR
SELECT  a.name ,
        c.name 
FROM    sysindexes a
        
JOIN sysindexkeys b 
ON a.id 
= b.id
                               
AND a.indid 
= b.indid
        
JOIN sysobjects c 
ON b.id 
= c.id
WHERE   a.indid 
NOT 
IN ( 
0
255 )  
 
and   c.xtype
=
'
U
'  
ORDER 
BY 
        c.name ,
        a.name 
OPEN allIndex;
FETCH 
NEXT 
FROM allIndex 
INTO 
@indexName
@tableName;
WHILE 
@@FETCH_STATUS 
= 
0
BEGIN
   
--
 Concatenate and display the current values in the variables.
   
PRINT 
@indexName 
+ 
'
,
' 
+  
@tableName
   
   
declare 
@beginTime 
datetime,
@endTime 
datetime,
@timespan time,
@sql 
varchar(
1000)
    
set 
@beginTime
=
GETDATE()
    
set 
@sql
=
'
ALTER INDEX 
'
+
@indexName
+
'
 ON 
'
+
@tableName
+
'
 REORGANIZE WITH ( LOB_COMPACTION = ON )
'
    
exec(
@sql)
    
set 
@endTime
=
GETDATE()
    
set 
@timespan
=
@endTime
-
@beginTime
    
INSERT 
INTO 
[
YeeGoTemp
].
[
dbo
].
[
ReorganizeLog
](
[
Name
],
[
TableName
],
[
BeginTime
],
[
EndTime
],
[
TimeSpan
])
         
VALUES(
@indexName,
@tableName,
@beginTime,
@endTime,
@timespan)
    
   
FETCH 
NEXT 
FROM allIndex 
INTO 
@indexName
@tableName;
END
CLOSE allIndex;
DEALLOCATE allIndex;
GO

 

    通过以上代码即可以实现。

    在此以作备忘之用。

转载于:https://www.cnblogs.com/cxd4321/p/3146207.html

你可能感兴趣的文章
Hibernate原理解析-Hibernate中实体的状态
查看>>
六时车主 App 隐私政策
查看>>
C语言常见问题 如何用Visual Studio编写C语言程序测试
查看>>
Web用户的身份验证及WebApi权限验证流程的设计和实现
查看>>
ECMAScript6-let与const命令详解
查看>>
什么是敏捷设计
查看>>
.NET中栈和堆的比较
查看>>
如何优化limit
查看>>
几种常用数据库字段类型查询语句
查看>>
Java判断语句中判断条件的执行顺序
查看>>
Windows平台下tomcat+java的web程序持续占cpu问题调试
查看>>
Content Server HA搭建
查看>>
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
CenOS+宝塔(模拟)上线博客项目
查看>>
接口,lambda表达式与内部类(二)
查看>>
Phabricator是什么,代码审查工具
查看>>
DirectX:函数可以连接任意两个filter 分类: Direct...
查看>>
算法:求从1到n这n个整数的十进制表示中1出现的次数-- python 实现
查看>>