使用以下脚本查看数据库索引碎片的大小情况:

复制代码代码如下:
DBCC SHOWCONTIG WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS 

以下使用脚本来处理维护作业:

复制代码代码如下:
/*Perform a 'USE <database name>' to select the database in which to run the script.*/ 
-- Declare variables 
SET NOCOUNT ON; 
DECLARE @tablename varchar(255); 
DECLARE @execstr varchar(400); 
DECLARE @objectid int; 
Declare @IndexName varchar(500); 
DECLARE @indexid int; 
DECLARE @frag decimal; 
DECLARE @maxfrag decimal; 
DECLARE @TmpName varchar(500);

-- Declare @TmpName ='' 
set @TmpName = ''

-- Decide on the maximum fragmentation to allow for. 
SELECT @maxfrag = 30.0;

-- Declare a cursor. 
DECLARE tables CURSOR FOR 
SELECT TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE';

-- Create the table. 
CREATE TABLE #fraglist ( 
ObjectName char(255), 
ObjectId int, 
IndexName char(255), 
IndexId int, 
Lvl int, 
CountPages int, 
CountRows int, 
MinRecSize int, 
MaxRecSize int, 
AvgRecSize int, 
ForRecCount int, 
Extents int, 
ExtentSwitches int, 
AvgFreeBytes int, 
AvgPageDensity int, 
ScanDensity decimal, 
BestCount int, 
ActualCount int, 
LogicalFrag decimal, 
ExtentFrag decimal);

-- Open the cursor. 
OPEN tables;

-- Loop through all the tables in the database. 
FETCH NEXT 
FROM tables 
INTO @tablename;

WHILE @@FETCH_STATUS = 0 
BEGIN; 
-- Do the showcontig of all indexes of the table 
INSERT INTO #fraglist 
EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') 
WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS'); 
FETCH NEXT 
FROM tables 
INTO @tablename; 
END;

-- Close and deallocate the cursor. 
CLOSE tables; 
DEALLOCATE tables;

-- Declare the cursor for the list of indexes to be defragged. 
DECLARE indexes CURSOR FOR 
SELECT ObjectName, ObjectId,IndexName,IndexId, LogicalFrag 
FROM #fraglist 
WHERE INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0;

-- Open the cursor. 
OPEN indexes;

-- Loop through the indexes. 
FETCH NEXT 
FROM indexes 
INTO @tablename, @objectid, @IndexName,@indexid, @frag;

WHILE @@FETCH_STATUS = 0 
BEGIN; 
if @frag < @maxfrag 
Begin 
SELECT @execstr = 'ALTER INDEX [' + RTRIM(@IndexName) + '] ON [' + RTRIM(@tablename) + '] REORGANIZE WITH ( LOB_COMPACTION = ON ) ' 
print @maxfrag + ' ' + @execstr 
End 
else 
Begin 
SELECT @execstr = 'ALTER INDEX [' + RTRIM(@IndexName) + '] ON [' + RTRIM(@tablename) + '] REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = OFF, ONLINE = OFF )' 
print @maxfrag + ' ' + @execstr 
End

EXEC (@execstr);

--更新统计信息 
IF @TmpName<>@tablename 
BEGIN 
SET @tmpName=@tableName 
PRINT 'UPDATE STATISTICS '+@TableName + ' WITH FULLSCAN ' 
EXEC ('UPDATE STATISTICS '+@TableName + ' WITH FULLSCAN ') 
END

FETCH NEXT 
FROM indexes 
INTO @tablename, @objectid, @IndexName,@indexid, @frag; 
END;

-- Close and deallocate the cursor. 
CLOSE indexes; 
DEALLOCATE indexes;

-- Delete the temporary table. 
DROP TABLE #fraglist; 
GO 

SQL Server 索引维护sql语句的更多相关文章

  1. SQL Server 索引维护(1)——系统常见的索引问题

    前言: 在很多系统中,比如本人目前管理的数据库,索引经常被滥用,甚至使用DTA(数据库引擎优化顾问)来成批创建索引(DTA目前个人认为它的真正用处应该是在发现缺失的统计信息,在以前的项目中,用过一次D ...

  2. SQL Server 索引维护:系统常见的索引问题

    在很多系统中,比如本人目前管理的数据库,索引经常被滥用,甚至使用DTA(数据库引擎优化顾问)来成批创建索引(DTA目前个人认为它的真正用处应该是在发现缺失的统计信息,在以前的项目中,用过一次DTA,里 ...

  3. SQL Server 索引维护(1)——如何获取索引使用情况

    前言: 在前面一文中,已经提到了三类常见的索引问题,那么问题来了,当系统出现这些问题时,该如何应对? 简单而言,需要分析现有系统的行为,然后针对性地对索引进行处理: 对于索引不足的情况:检查缺少索引的 ...

  4. SQL Server索引维护

    索引维护的两个重要方面是索引碎片和统计信息. 一:索引碎片 降低碎片的产生,当索引上的页不在具有物理连续性时,就会产生碎片,下面的情景会产生碎片: INSERT操作.UPDATE操作.DBCC SHR ...

  5. SQL SERVER 索引维护

    -- 全数据库索引重建 DECLARE @name varchar(100)DECLARE authors_cursor CURSOR FOR Select [name] from sysobject ...

  6. 转: SQL Server索引的维护 - 索引碎片、填充因子

    转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...

  7. SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>

    实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多), ...

  8. SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>

    一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...

  9. SQL Server索引设计 <第五篇>

    SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列: 使用窄索引: 检查列的选择性: 检查列的数据类型: 考虑列顺序: 考虑索引类型(聚集索引OR非聚集索引): 一.检查 ...

随机推荐

  1. 注册“Oracle Provider for OLE DB”和创建链接服务器

    在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”. 如果电脑上没有这个驱动,安装一个完整的Oracl ...

  2. Ztree手风琴效果(第三版)

    第一版:点击一级目录展开,再点击时不能收回 第二版:点击一级目录展开,再点击时可以收回 第三版:优化样式,修复主菜单下的子菜单下级无子节点时点击无反应问题(js报错) <%@ page lang ...

  3. ==、equals、hashCode区别?

    [==.equals().hashCode()区别?] 1)== 运算符用来比较两个变量的值是否相等. 即该运算符用于比较变量对应得内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是 ...

  4. android代码格式化方法小结

    转载:http://blog.csdn.net/androidzhaoxiaogang/article/details/7692526 Download the android-formatting. ...

  5. 如何禁用电脑USB接口

    方法一,BIOS设置法 重新启动计算机,在开机过程中,点击键盘上的“Delete”键,进入BIOS设置界面,选择“Integrated Peripherals”选项,展开后将“USB 1.1 Cont ...

  6. http GET

    向php脚本中传参数可以用http GET 方法,比如要向file.php传两个参数v1和v2.则可以这么做 file.php?v1=&v2= (一个链接而已,直接编辑URL即可传参数了) 这 ...

  7. SVN和GIT的使用

    一.SVN通用流程 1.从服务器仓库的项目上右键拷贝项目地址,然后来到你的电脑桌面上右键“SVN checkout...”,这样就跟服务器建立了关联 2.如果有创建新文件,则右键选择“Tortoise ...

  8. textarea内容太多, 鼠标点击全部显示

    strRight+="<td bordercolor='#DEDEDE' width='500px' height='50'><div title='"+data ...

  9. Windows GTK+ 环境搭建(详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc901017ygy.html Windows GTK+ 环境搭建 最近要做界面的一些东西,但是对微软提供的类库MFC不 ...

  10. Java多态(一)

    父类: public class Parent { public String name; private String pass; public void say1(AA aa){ System.o ...