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

复制代码代码如下:
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. Adobe flash CC 汉化破解方法

    转载整理自:http://www.sdifenzhou.com/flashprofessionalcc.html 断网,解压下载的破解dmg文件得到这些文件 第一步,解压安装包,安装,并打开,不要输入 ...

  2. ORACLE小工具:存储过程清空所有表或使所有触发器失效

    清空所有表: CREATE OR REPLACE PROCEDURE CLEAN_TABLES as v_tablename varchar2(256); cursor cur_tablename i ...

  3. C#连接ACCESS的一个问题

    C# 连接ACCESS数据库有时候报 "Microsoft.Jet.Oledb.4.0"没有注册,其实,并不是真的没注册,可能是下面的原因 在菜单 “项目”的最下面 工程属性 菜单 ...

  4. VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)

    '=========================================================================='' VBScript Source File - ...

  5. Chapter 2 Open Book——20

    Jessica pulled on my arm. Jessica拉了一下我的手臂. "Hello? Bella? What do you want?"I looked down; ...

  6. 《JS权威指南学习总结--第三章类型、值和变量》

    第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...

  7. POJ 1258 Agri-Net(Prim)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cmath> #include<algori ...

  8. MC 在1分钟图拿出5分钟,15分钟,30分钟,1小时的K线

    using System; using System.Drawing; using System.Linq; using System.Collections; namespace PowerLang ...

  9. 如何复原Eclipse的Package Explorer

    重新设置,复位透视图吧这样的方法最简便window--->reset perspective 你会喜欢这个操作的

  10. xcode单步调试快捷键

    xcode单步调试快捷键f6,但是磨人f6是用来调节键盘亮度的,在系统偏好,键盘设置里面,做如下设置就可以了.