脚本来自《Inside Server 2005 T-SQL Programming》

SET NOCOUNT ON;DECLARE @objectid int;DECLARE @indexid int;DECLARE @partitioncount bigint;DECLARE @schemaname nvarchar(258);DECLARE @objectname nvarchar(258);DECLARE @indexname nvarchar(258);DECLARE @partitionnum bigint;DECLARE @partitions bigint;DECLARE @frag float;DECLARE @command varchar(8000);-- ensure the temporary table does not existIF 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.-- 将符合所设条件的IndexID选出来,并将名称转换为友好名称SELECTobject_id AS objectid,    index_id AS indexid,    partition_number AS partitionnum,    avg_fragmentation_in_percent AS fragINTO work_to_doFROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')-- *****************************-- 此参数设定很重要 avg_fragmentation_in_percent > 10.0-- *****************************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 NEXTFROM partitionsINTO @objectid, @indexid, @partitionnum, @frag;

WHILE @@FETCH_STATUS = 0BEGIN;SELECT @objectname = QUOTENAME(o.name),@schemaname = QUOTENAME(s.name)FROM sys.objects AS oJOIN sys.schemas as s ON s.schema_id = o.schema_idWHERE o.object_id = @objectid;SELECT @indexname = QUOTENAME(name)FROM sys.indexesWHERE object_id = @objectid AND index_id = @indexid;SELECT @partitioncount = count (*)FROM sys.partitionsWHERE object_id = @objectid AND index_id = @indexid;-- 30 is an arbitrary decision point at which to switch-- between reorganizing and rebuilding-- 设定重新生成和重新组织的边界条件  -- *****************************-- 此参数设定很重要-- *****************************IF @frag < 5.0BEGIN;SELECT @command = 'ALTER INDEX ' + @indexname + ' ON '+ @schemaname + '.' + @objectname + ' REORGANIZE';IF @partitioncount > 1SELECT @command = @command + ' PARTITION='+ CONVERT (CHAR, @partitionnum);EXEC (@command);END;

IF @frag >= 5.0BEGIN;SELECT @command = 'ALTER INDEX ' + @indexname +' ON ' + @schemaname+ '.' + @objectname + ' REBUILD';IF @partitioncount > 1SELECT @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

转载于:https://www.cnblogs.com/solorez/archive/2008/10/25/1319497.html

[翻译]自动维护索引重新生成组织的SQL批处理语句相关推荐

  1. oracle12c 新增维护时间窗口,ORACLE 12C新特性-自动维护全局索引 | 信春哥,系统稳,闭眼上线不回滚!...

    今天在网上看了一篇关于12C新特性-自动维护全局索引的帖子,经测试,貌似根本不是那么回事呀.如果对分区表进行分区DDL操作,如果不加update index字句,全局索引就会失效,下面先看一下是11. ...

  2. sqlserver索引信息查看及重新生成组织索引

    当数据库表使用久了,特别是数据频繁增删改后,索引会产生碎片,会影响索引的效率,这就需要及时优化. 官方建议大于百分三十的索引是要重建的. 索引相关语句 ------------------------ ...

  3. 如何自动维护全文索引和目录

    介绍 (Introduction) In a previous article entitled Hands on Full-Text Search in SQL Server, we had an ...

  4. 分区表自动维护 mysql_Oracle 10g分区表的自动维护

    oracle 10g分区表不支持自动化管理,一般都要手动创建分区,手动删除.今天给大家带来了一个自动化管理表空间的脚本. Oracle 10g分区表不支持自动化管理,一般都要手动创建分区,,手动删除. ...

  5. Log4Net日志分类和自动维护

    背景 在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案.不知道是我用的不好,用到最后反而都不想看日志了.原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的 ...

  6. oracle 10g 分区管理,Oracle 10g分区表的自动维护

    Oracle 10g分区表不支持自动化管理,一般都要手动创建分区,手动删除.今天给大家带来了一个自动化管理表空间的脚本. 本脚本主要由3个部分组成:sys_ConfigTable.sql.sys_pr ...

  7. 使用navicat for mysql 创建外键foreign keys时,总会自动创建索引indexs

    使用navicat for mysql 创建外键foreign keys时,总会自动创建索引indexs.如果删除这个索引就会提示错误error 1553:cann't drop index-:nee ...

  8. 饥荒简单搭建教程与自动维护(傻瓜都能学会)

    饥荒简单搭建教程与自动维护(傻瓜都能学会) 前言 由于开服之后需要花费大量的时间和精力去维护服务器因此自动维护诞生了.这篇教程从搭建饥荒基本环境到开服,最后到自动维护,内容简易,操作简单.(注意使用此 ...

  9. Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)

    Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录

最新文章

  1. iOS之 NSTimer(一)
  2. boost::stl_interfaces模块实现重复字符迭代器的测试程序
  3. php validate form,laravel 中validate验证规则 利用FormRequest进行数据验证
  4. vue-router配置介绍和使用方法(一)
  5. get_class 方法
  6. hdu-5867 Water problem(水题)
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试土力学与地基基础10445k1
  8. 分享一些C语言的学习资料
  9. MD5详解(校验文件完整性)
  10. ZYNQ研究----(2)基于开发板制作串口测试程序
  11. centos操作系统镜像文件下载
  12. 注释里面 //TODO... 的作用
  13. ode45matlab例子,ode45(ode45用法举例)
  14. 解析中小学生的 AI 思维学习模型
  15. 计算机毕业设计论文不会做怎么办?这里送教程送代码送开题送答辩
  16. PCB相关知识-焊盘Pad
  17. 用速腾RS16跑LeGO-LOAM
  18. BitXHub跨链交易的流程
  19. 一个HR工资变化,网友直呼太假了
  20. 彻底关掉win10自动更新_WIN10 常用设置收集 便利方法收集

热门文章

  1. VS2012代码提示快捷键
  2. TCP三次握手和四次挥手的解释
  3. matplotlib交互模式
  4. Vue登录切换中的问题及解决
  5. 如何将自定义代码生成TVM
  6. 2021年大数据Hadoop(二):Hadoop发展简史和特性优点
  7. [C] 图的广度优先遍历
  8. c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...
  9. java 多线程 事件_java 多线程-线程不安全案例
  10. ImageView 常用属性的分析