大致的重建范围是 逻辑密度碎片>30以及页码总数>8以上的数据库索引碎片
直接上代码(附带生成执行完之后生成日志记录表)
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
Create PROCEDURE [dbo].[p_index_rebuild_test]
AS
DECLARE @DatabaseName NVARCHAR(255)--数据库名
DECLARE @SchemaName NVARCHAR(255)--架构名
DECLARE @TableName NVARCHAR(255)--表名
DECLARE @IndexName NVARCHAR(255)--索引名
DECLARE @IndexType NVARCHAR(255)--索引类型
DECLARE @IndexColums NVARCHAR(MAX)--索引列清单
DECLARE @DuringTime INT--重建时间
DECLARE @Before_avg_fragmentation_in_percent DECIMAL(19,8)--重建前的逻辑扫描碎片
DECLARE @After_avg_fragmentation_in_percent DECIMAL(19,8)--重建后的逻辑扫描碎片
SET XACT_ABORT ON
SET NOCOUNT ON
-----------定期重建索引执行计划--------
BEGIN TRAN
----------1、创建记录表,写入本次索引重构的日志
--日志表名
DECLARE @LogTableName NVARCHAR(255)='ReBuildIndexLog_'+CONVERT(VARCHAR(100),GETDATE(),112)
DECLARE @sql NVARCHAR(MAX)=''
IF EXISTS(SELECT * FROM sys.objects WHERE object_id=OB