MSSQL自动重建出现碎片的索引的方法分享自动重建出现碎片的索引的方法分享
1.索引碎片的产生?
由于在表里大量的插入、修改、删除操作而使索引页分裂。如果索引有了高的碎片,有两种情况,一种情况是扫描索引需要花
费很多的时间,另一种情况是在查询的时候索引根本不使用索引,都会导致性能降低。
2.碎片类型分为:
2.1 内部破碎
由于索引页里的数据插入或修改操作而发生,以数据作为稀疏矩阵的形式的分布而结束,这将导致数据页的增加,从而增加查
询时间。
2.2外部破碎
由于索引/数据页的数据插入或修改而发生,以页码分离和在文件系统里不连贯的新的索引页的分配而结束,数据库服务器不
能利用预读操作的优点,因为:下一个相关联的数据页不临近,而且这些相关连的下面的页码可能在数据文件的任何地方。
自动重建发生碎片的索引
在数据中新建碎片整理存储过程
代码如下:
— ================================================
— TEMPLATE GENERATED FROM TEMPLATE EXPLORER USING:
— CREATE PROCEDURE (NEW MENU).SQL
—
— USE THE SPECIFY VALUES FOR TEMPLATE PARAMETERS
— COMMAND (CTRL-SHIFT-M) TO FILL IN THE PARAMETER
— VALUES BELOW.
—
— THIS BLOCK OF COMMENTS WILL NOT BE INCLUDED IN
— THE DEFINITION OF THE PROCEDURE.
— ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
— =============================================
— AUTHOR: <AUTHOR,,WUXIANGQIAN>
— CREATE DATE: <CREATE DATE,2014-05-16>
— DESCRIPTION: <DESCRIPTION,重建出现碎片的索引>
— =============================================
ALTER PROCEDURE USP_IMS_DEFRAGMENT_INDEXES
AS
–声明变量
SET NOCOUNT ON
DECLARE @TABLENAME VARCHAR (128) –表名称(已发生索引碎片)
DECLARE @EXECSTR VARCHAR (255) –执行重建索引的语句
DECLARE @INDEXNAME CHAR(255) –索引名称
DECLARE @DBNAME SYSNAME –数据库名称