≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server 数据库索引整理语句,自动整理数据库索引

人气:446 时间:2019-06-06

这篇文章主要为大家详细介绍了SQL Server 数据库索引整理语句,自动整理数据库索引,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

在一个大型数据库中,数据的更改是非常频繁的。
而建立在这些数据上的索引也是需要经常去维护的。
否则这这些数据索引就起不到起应起的作用。甚至会成为数据库本身的负担。
我们就要定期的对数据库的索引进行维护 我在MSDN上发现了这个脚本不过其中有些小问题我已经修正 大家可以使用这个脚本对数据库的索引进行日常维护

代码如下:


SET NOCOUNT ON; 
DECLARE @objectid int; 
DECLARE @indexid int; 
DECLARE @partitioncount bigint; 
DECLARE @schemaname sysname; 
DECLARE @objectname sysname; 
DECLARE @indexname sysname; 
DECLARE @partitionnum bigint; 
DECLARE @partitions bigint; 
DECLARE @frag float; 
DECLARE @command varchar(8000); 
DECLARE @dbId int; 
-- ensure the temporary table does not exist 
IF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do') 
DROP TABLE work_to_do; 
-- conditionally select from the function, converting object and index IDs to names. 
set @dbId=DB_ID(); 
SELECT 
object_id AS objectid, 
index_id AS indexid, 
partition_number AS partitionnum, 
avg_fragmentation_in_percent AS frag 
INTO work_to_do FROM sys.dm_db_index_physical_stats (@dbId, NULL, NULL , NULL, 'LIMITED') 
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0; 
-- Declare the cursor for the list of partitions to be processed. 
DECLARE partitions CURSOR FOR SELECT * FROM work_to_do; 

-- Open the cursor. 
OPEN partitions; 

-- Loop through the partitions. 
FETCH NEXT 
FROM partitions 
INTO @objectid, @indexid, @partitionnum, @frag; 

WHILE @@FETCH_STATUS = 0 
BEGIN; 
SELECT @objectname = o.name, @schemaname = s.name 
FROM sys.objects AS o 
JOIN sys.schemas as s ON s.schema_id = o.schema_id 
WHERE o.object_id = @objectid; 

SELECT @indexname = name 
FROM sys.indexes 
WHERE object_id = @objectid AND index_id = @indexid; 

SELECT @partitioncount = count (*) 
FROM sys.partitions 
WHERE object_id = @objectid AND index_id = @indexid; 

-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding 
IF @frag < 30.0 
BEGIN; 
SELECT @command = 'ALTER INDEX [' + @indexname + '] ON ' + @schemaname + '.[' + @objectname + '] REORGANIZE'; 
IF @partitioncount > 1 
SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum); 

EXEC (@command); 
END; 

IF @frag >= 30.0 
BEGIN; 
SELECT @command = 'ALTER INDEX [' + @indexname +'] ON ' + @schemaname + '.[' + @objectname + '] REBUILD'; 
IF @partitioncount > 1 
SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum); 

EXEC (@command); 
END; 
PRINT 'Executed ' + @command; 

FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag; 
END; 
-- Close and deallocate the cursor. 
CLOSE partitions; 
DEALLOCATE partitions; 

-- drop the temporary table 
IF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do') 
DROP TABLE work_to_do; 
GO 

这个脚本在运行时 会建立一个表 work_to_do 整理完毕后会自动删除这个表。如果大家不喜欢这样的话也可以用 一个 临时表解决 .

本文来自:http://www.q1010.com/179/7642-0.html

注:关于SQL Server 数据库索引整理语句,自动整理数据库索引的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQLServer 触发器 数据库进行数据备份
  • 用户"sa"登陆失败 SQLServer 错误18456的解决方法
  • SQL Server做购物车系统时利用到得几个sqlserver 存储过程
  • SQLServer 优化SQL语句 in 和not in的替代方案
  • win2003 安装 sqlserver 2005的方法
  • SQL Server当恢复sqlserver bak文件时,原始的用户无法删除的解决方法
  • SQL Server分页存储过程(三)在sqlserver中打造更加准确的分页结果
  • 分页存储过程(二)在sqlserver中返回更加准确的分页结果
  • SQL Server 2000数据库同步 同步两个SQLServer数据库的内容
  • SQLServer触发器创建、删除、修改、查看示例代码
上一篇:SQL Server 2000 远程连接 服务器的解决方案
下一篇:SQL Server 批处理 动态sql
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。