`

索引的碎片整理SQL语句

sql 
阅读更多
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @maxfrag DECIMAL
--设置最大允许的碎片数量,超过则对索引进行碎片整理
SET @maxfrag = 30.0
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)

--获取当前数据库中所有数据表的索引碎片信息,并保存到临时表
DECLARE tables CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
OPEN tables
FETCH NEXT FROM tables INTO @tablename
WHILE @@FETCH_STATUS = 0 BEGIN
INSERT INTO #fraglist 
EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') 
WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
FETCH NEXT FROM tables INTO @tablename
END
CLOSE tables
DEALLOCATE tables
/*
ObjectName:数据表名称
IndexId:索引ID
LogicalFrag:逻辑碎片值
*/
DECLARE indexes CURSOR FOR SELECT ObjectName, ObjectId, IndexId, LogicalFrag FROM #fraglist
WHERE LogicalFrag >= @maxfrag
AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0
OPEN indexes
FETCH NEXT FROM indexes INTO @tablename, @objectid, @indexid, @frag
WHILE @@FETCH_STATUS = 0 BEGIN

PRINT '正在执行 DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
' + RTRIM(@indexid) + ') - fragmentation currently '
+ RTRIM(CONVERT(varchar(15),@frag)) + '%'
--执行索引碎片整理
SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ', ' + RTRIM(@indexid) + ')'
EXEC (@execstr)
FETCH NEXT FROM indexes INTO @tablename, @objectid, @indexid, @frag
END
CLOSE indexes
DEALLOCATE indexes
DROP TABLE #fraglist
GO

 

分享到:
评论

相关推荐

    SQLServer索引碎片和解决方法

    ### SQL Server索引碎片及其解决方法 #### 一、索引碎片的概念 索引是数据库管理系统(DBMS)中一种重要的数据结构,用于提高数据检索的速度。然而,随着时间的推移,索引可能会出现碎片化的情况,这会影响查询...

    sql server 重新组织和重新生成索引

    SQL Server 2005 提供了重新组织和重新生成索引的功能,以修复索引碎片。 重新组织索引 重新组织索引是通过对叶页进行物理重新排序,使其与叶节点的逻辑顺序(从左到右)相匹配,从而对表或视图的聚集索引和非聚集...

    Oracle解决索引碎片功能.txt

    为了判断一个索引是否需要进行碎片整理,可以通过执行以下SQL语句来获取相关信息: ```sql SELECT name, HEIGHT, PCT_USED, DEL_LF_ROWS / LF_ROWS FROM index_stats; ``` 这里的关键字段包括: - `name`:索引名称...

    创建索引对SQL语句执行的影响.doc

    过多的索引可能导致索引碎片,降低查询性能。因此,定期分析和调整索引策略是数据库管理的重要环节。例如,可以使用`ANALYZE TABLE`命令收集统计信息,帮助优化器做出更好的决策。 综上所述,创建索引对SQL语句执行...

    【转载】浅谈基于索引的SQL语句优化方法

    1. 定期分析和重建索引:检查索引碎片,必要时进行重建以保持高效。 2. 监控和调整:观察系统性能,根据实际需求动态调整索引策略。 总之,基于索引的SQL语句优化是数据库性能调优的重要组成部分。通过理解索引的...

    SQL 语句完全优化

    ### SQL语句完全优化 在IT领域,特别是数据库管理和应用开发方面,SQL(Structured Query Language)作为一门标准语言被广泛应用于各种数据库系统中。而针对Oracle数据库,如何编写出不仅功能强大而且性能卓越的SQL...

    SQL语句优化数据库java

    - 定期进行索引重组(REINDEX)、碎片整理(INDEXDEFRAG)等操作,保持索引的高效性。 - 使用DBCC SHRINKDB或DBCC SHRINKFILE命令回收未使用的空间。 7. **查询计划优化**: - 利用EXPLAIN或QUERY PLAN功能来...

    基于索引的SQL语句优化之降龙十八掌

    在数据库管理中,SQL语句的优化是提升系统性能的关键环节。"基于索引的SQL语句优化之降龙十八掌"这一主题深入探讨了如何通过有效地利用索引来改进SQL查询效率,从而达到优化数据库操作的目的。这篇博客的作者通过一...

    oracle常用性能监控SQL语句

    通过该查询可以快速定位出这些SQL语句,并进一步分析其执行计划和索引情况,以优化性能。 #### 二、Session Wait Events 统计 - **SQL**: ```sql select event, sum(decode(wait_time, 0, 0, 1)) "Prev", sum...

    Oracle DBA 常用的一些SQL语句(50个)

    查看某个进程正在执行什么SQL语句.sql 查看用户表所占空间的大小.sql 查看系统SGA区状态.sql 查看系统中使用了哪些设备文件.sql 查看系统中每个表空间的使用情况.sql 查看系统中每个表空间的大小.sql 查看系统联接数...

    SQL Server 索引维护sql语句

    本话题将深入探讨如何使用SQL语句来维护和管理SQL Server的索引碎片。 1. **查看索引碎片** 使用`DBCC SHOWCONTIG`命令可以检查数据库中表和索引的碎片情况。这个命令提供了关于索引的详细统计,包括碎片级别、...

    Oracle数据库设计中SQL语句优化研究.doc

    ### Oracle数据库设计中SQL语句优化研究 #### 引言 随着信息技术的快速发展,数据库作为信息系统的核心组件之一,在各类业务场景中的应用越来越广泛。Oracle数据库因其高性能、高可靠性等特点成为了许多企业的首选...

    高性能sql语句讲解

    通过重建索引,不仅可以消除索引碎片,还能优化索引结构,提高查询效率。需要注意的是,在执行索引重构操作时,可能会暂时占用较多的系统资源,因此最好选择在业务低峰时段进行。 以上内容总结了在实际开发中常用的...

    Oracle数据库SQL语句优化策略

    ### Oracle数据库SQL语句优化策略 #### 一、Oracle优化器模式 Oracle数据库提供了三种主要的优化器模式:基于规则的优化器(RULE)、基于成本的优化器(COST)和基于选择的优化器(CHOOSE)。这三种模式分别对应着...

    Sql Server 索引使用情况及优化的相关Sql语句分享

    本文将分享几个用于分析和优化SQL Server索引的SQL语句。 首先,我们可以使用以下语句来分析数据库中碎片率超过25%的索引: ```sql DECLARE @dbid int SELECT @dbid = db_id() SELECT o.name as tablename, s.* ...

    数据库sql语句要点数据库sql语句要点.doc

    在数据库SQL语句中,有几个重要的知识点值得深入理解: 1. **创建表(CREATE TABLE)**:`CREATE TABLE 成绩表`用于定义数据表的结构,包括字段名、数据类型和约束。例如,`学号`设为`char(8)`并添加`primary key`...

    SQL Server 2000数据库中如何重建索引

    在SQL Server 2000中,有两种主要的方式来重建索引:使用`CREATE INDEX`语句的`DROP_EXISTING`子句,以及使用`DBCC DBREINDEX`语句。 1. `CREATE INDEX` with `DROP_EXISTING`: 这种方法允许你在不删除旧索引的...

    如何使用sql语句使数据库性能提高

    - 定期执行数据库的分析和维护任务,如碎片整理和统计信息更新。 通过上述方法,你可以显著提升SQL语句的性能,从而优化数据库的整体运行效率。不过,需要注意的是,每种数据库管理系统可能会有其特定的优化策略,...

Global site tag (gtag.js) - Google Analytics