`
xiaoer_1982
  • 浏览: 1871187 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

删除指定表的所有索引和统计

阅读更多
一个删除指定表的所有索引和统计的过程

------------------------------------------------------------------------

-- Author : HappyFlyStone

-- Date : 2009-09-05 00:57:10

-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)

-- Apr 14 2006 01:12:25

-- Copyright (c) 1988-2005 Microsoft Corporation

-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

--

------------------------------------------------------------------------

IF EXISTS (SELECT name FROM sysobjects WHERE id = OBJECT_ID('sp_DropAllIndex')

AND OBJECTPROPERTY(OBJECT_ID('sp_DropAllIndex'),'IsProcedure')=1)

DROP PROCEDURE sp_DropAllIndex

GO

CREATE PROCEDURE sp_DropAllIndex

@tabname nvarchar(150) -- 需要删除统计或索引的表

AS

BEGIN

DECLARE @drop_idx_string nvarchar(4000) -- 存放动态组织而成的DROPS index/stats 语法

SET NOCOUNT ON

-- check table

IF NOT EXISTS (SELECT 1

FROM INFORMATION_SCHEMA.TABLES

WHERE table_type = 'base table' AND table_name = @tabname)

BEGIN

RAISERROR(N'------当前表''%s'' 不存在!',16, 1, @tabname)

RETURN (1)

END

SET @tabname = OBJECT_ID(@tabname)

IF EXISTS (SELECT 1

FROM sysindexes

WHERE id=@tabname AND indid BETWEEN 1 AND 254

AND status IN (96,10485856,8388704))

BEGIN

SELECT @drop_idx_string = isnull(@drop_idx_string+';','')

+ ('DROP STATISTICS '+OBJECT_NAME(@tabname)+'.'+name)

FROM sysindexes

WHERE id=@tabname AND indid BETWEEN 1 AND 254

AND status IN (96,10485856,8388704)

END

IF Len(@drop_idx_string) > 0

BEGIN

PRINT N'------统计删除列表------'

PRINT @drop_idx_string+';'

EXECUTE(@drop_idx_string+';')

PRINT N'------统计删除结束------'

END

IF EXISTS (SELECT 1 FROM sysindexes

WHERE id=@tabname AND indid BETWEEN 1 AND 254

AND status NOT IN (96,10485856,8388704))

BEGIN

SET @drop_idx_string = NULL

select @drop_idx_string = isnull(@drop_idx_string+';'+CHAR(13)+CHAR(10),'')

+ ('DROP INDEX '+OBJECT_NAME(@tabname)+'.'+name)

FROM sysindexes

WHERE id=@tabname AND indid BETWEEN 1 AND 254

AND status NOT IN (96,10485856,8388704)

AND OBJECTPROPERTY (OBJECT_ID(name),'IsConstraint') IS NULL--过程不处理CONSTRAINTS

END

PRINT N'------索引删除列表------'

PRINT (@drop_idx_string+';')

EXEC( @drop_idx_string+';')

PRINT ('......'+CHAR(13)+CHAR(10)+'......')

PRINT N'------索引删除结束------'

END

GO

create clustered index idx_id on ta(id)

create index idx_col on ta(col)

go

sp_DropAllIndex 'ta'

/*

------索引删除列表------

DROP INDEX ta.idx_id;

DROP INDEX ta.idx_col;

......

......

------索引删除结束------

*/

分享到:
评论

相关推荐

    一个删除指定表的所有索引和统计的过程

    以下是一个删除指定表所有索引和统计的详细过程: 首先,创建一个存储过程`sp_DropAllIndex`,这个过程接收一个参数`@tabname`,该参数是需要操作的表名。存储过程的主要目的是动态构建并执行SQL语句来删除索引和...

    使用dbms_stats包手工收集统计信息

    这个过程需要指定索引的所有者、索引名和估算百分比等参数。例如: ```sql BEGIN DBMS_STATS.GATHER_INDEX_STATS ( ownname => 'TEST', indname => 'IDX_STUDENT_BIRTH', estimate_percent => DBMS_STATS.AUTO_...

    深入学习分区表及分区索引(详解oracle分区).docx

    以下是对Oracle分区表和分区索引的深入解析: 1. **何时使用分区**: - 当表的数据量超过2GB时,分区有助于避免32位操作系统下的文件大小限制,同时减少大规模数据的备份时间。 - 对于包含历史数据的表,如按月份...

    索引排序与统计PPT学习教案.pptx

    其中,复合索引文件又可分为压缩型和非压缩型,结构复合索引文件在打开表时会自动打开,并且能包含多个索引方案,系统会在增加、删除或修改记录时自动维护。 **索引的建立** 可以使用表设计器或命令方式建立索引。...

    oracle中索引的使用

    Oracle还提供了索引统计信息的收集,通过DBMS_STATS包可以更新索引的统计信息,帮助优化器做出更合理的查询计划选择。另外,可以使用EXPLAIN PLAN或者SQL Trace等工具来分析查询执行计划,了解索引的使用情况。 在...

    Oracle删除表中的重复数据

    重复数据的存在不仅会占用额外的存储空间,还可能导致数据统计错误、数据分析偏差等问题,因此,有效地删除表中的重复数据是保持数据质量和提高数据库性能的重要环节。本文将详细解析如何在Oracle中删除表中的重复...

    如何统计MySQL数据量大小

    数据量通常指的是数据库中所有表占用的磁盘空间总和,包括索引、数据行、日志文件等。统计数据量可以帮助我们识别哪些表占用了大量空间,以便进行进一步的分析和优化。 **CONCAT函数解读** CONCAT函数是MySQL中的...

    oracle索引使用样例

    #### 二、表和索引统计信息的收集 收集统计信息对于优化查询计划至关重要。可以通过以下几种方式收集统计信息: 1. **使用`ANALYZE TABLE`命令**: ```sql ANALYZE TABLE GD_YX_ZYTDYH COMPUTE STATISTICS FOR ...

    Oracle数据库删除表中重复记录的方法三则.txt

    - `DELETE FROM tb_channel a`:指定从表`tb_channel`中删除数据。 - `WHERE a.ROWID IN (SELECT MAX(b.ROWID) FROM tb_channel b WHERE a.policyNo = b.policyNo AND a.classCode = b.classCode)`:通过子查询找...

    分区索引研究.pdf

    通过对Oracle分区表及分区索引技术的深入了解,我们可以更加有效地管理和优化大型数据库系统的性能。合理的分区策略不仅可以提升查询效率,还能简化日常的数据库管理任务。希望本文能为读者提供有价值的指导和参考。

    对SQL Server索引的探讨.pdf

    管理索引包括创建索引、删除索引和更新索引统计信息。创建索引可以使用CREATE INDEX语句,并且可以通过DROP_EXISTING选项删除已存在的同名索引。此外,DBCC SHOWCONTIG可以显示关于索引的存储统计信息,帮助DBA判断...

    索引跳跃扫描案例优化分享.txt

    - **更新统计信息**:通过`DBMS_STATS`包更新表和索引的统计信息,确保CBO能够做出正确的决策。 - **定期维护**:定期对表和索引进行维护,包括清理不必要的索引、合并碎片等,有助于保持索引的有效性。 #### ...

    数据库索引

    组合索引是由多个列组成的索引,例如在一个`buy_log`表中可以有两个索引`user_id`和`(user_id, buy_date)`。考虑以下SQL语句: ```sql SELECT * FROM buy_log FORCE INDEX (user_id) WHERE user_id = 1 ORDER BY buy...

    oracle 索引

    1. 创建索引:使用CREATE INDEX语句,指定索引名、表名和要索引的列。 ```sql CREATE INDEX idx_example ON table_name(column_name); ``` 2. 删除索引:使用DROP INDEX语句。 ```sql DROP INDEX idx_example; ``` 3...

    mysql索引分析和优化

    - **定期分析和优化索引**:使用`ANALYZE TABLE`和`OPTIMIZE TABLE`等命令,确保索引统计信息是最新的,并且消除碎片,提高查询效率。 - **利用索引提示**:在复杂的查询中,可以使用`FORCE INDEX`、`USE INDEX`等...

    SQL2000 全文索引完全图解

    3. **创建全文索引**:选择要索引的表和列,然后在表上定义全文索引。可以使用SQL命令或SQL Server Management Studio进行操作。 4. **启动全文索引的填充**:创建索引后,需要对选定的列进行全文索引的填充,这将把...

    oracle索引开发指南

    然而,索引也有其缺点,如创建和维护成本、占用额外的存储空间以及影响数据插入、更新和删除的速度。 在选择建立索引的列时,应考虑以下特征: 1. 经常搜索的列,索引可以加速查找。 2. 主键列,索引强制唯一性并...

    SQL Server索引设计和调优技术大全

    - **统计信息**:定期更新索引的统计信息,以确保查询计划器能够做出准确的决策。 #### 五、创建和优化索引 - **创建索引的最佳实践**: - 避免对经常更新的列创建索引。 - 使用合适的数据类型和长度。 - **优化...

    查看Sql中自动创建的索引

    此查询会返回与指定表相关的所有自动创建的索引。其中: - `object_id`:表示表的ID,通过`OBJECT_ID()`函数获取。 - `name`:表示索引名称,通过`LIKE`子句过滤出自动创建的索引(以`_wa_sys`开头)。 #### 三、...

Global site tag (gtag.js) - Google Analytics