`
xiaoer_1982
  • 浏览: 1874505 次
  • 性别: 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;

......

......

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

*/

本文转自:http://blog.csdn.net/happyflystone/archive/2009/09/05/4521568.aspx

分享到:
评论

相关推荐

    使用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时,分区有助...

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

    1. **主索引**:具有唯一性的索引,每个记录的索引值都是唯一的,自由表无法建立主索引,一个数据库表只能有一个主索引。 2. **候选索引**:与主索引类似,但一个表可以有多个候选索引。 3. **唯一索引**:允许索引...

    Oracle删除表中的重复数据

    在Oracle中删除表中的重复数据是一个涉及到数据安全性和效率的关键操作。通过上述步骤,可以有效地清除重复数据,同时保护原表的完整性和结构。然而,在实际操作中,应根据具体场景和需求调整SQL语句,比如选择合适...

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

    - 表move是指将一个表从一个位置移动到另一个位置的过程,通常发生在表空间重组、表重命名等场景下。 - 在表move过程中,Oracle数据库可能会重新构建索引结构,以适应新的表布局。 2. **索引失效的原因**: - **...

    oracle中索引的使用

    位图索引则适合于值分布稀疏的列,例如性别、部门等分类较少的字段,位图索引将每个值映射为一个位,节省存储空间。函数索引允许在列上应用函数后再创建索引,如对日期字段进行年份提取后建索引。唯一索引则确保索引...

    对SQL Server索引的探讨.pdf

    聚集索引决定了数据在表中的物理存储顺序,一个表只能有一个聚集索引。非聚集索引包含索引键和指向数据行的指针,表可以有多个非聚集索引。索引的作用是为了加速数据检索过程,提高数据库查询的性能。 2. 索引的...

    oracle索引使用样例

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

    如何统计MySQL数据量大小

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

    数据库索引

    组合索引是由多个列组成的索引,例如在一个`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...

    分区索引研究.pdf

    分区表是指将一个大的物理表分割成多个较小的部分(即分区),这些部分可以独立管理,并存储在不同的位置。通过合理地设计分区策略,可以显著提高查询性能,简化管理和维护工作。 ### 分区类型 #### Range分区 ...

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

    首先创建一个新表并插入去重后的数据,然后删除旧表,并将新表重命名为旧表的名字,以此达到删除重复记录的效果。 **SQL示例代码:** ```sql SELECT DISTINCT * INTO new_table FROM old_table ORDER BY ...; DROP...

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

    - **聚簇索引(Clustered Index)**:每个表只能有一个聚簇索引,它决定了表中数据的物理存储顺序。 - **非聚簇索引(Nonclustered Index)**:可以有多个非聚簇索引,它们不改变表中数据的存储顺序,而是指向聚簇索引...

    SQL2000 全文索引完全图解

    1. **创建全文目录**:首先,需要在服务器上创建一个全文目录,它是存储索引和相关元数据的地方。 2. **启用全文服务**:在SQL Server服务管理器中,确保全文服务已启动,并设置正确的启动账户。 3. **创建全文索引*...

    第5章数据排序、检索、统计和多表操作.pptx

    《第5章 数据排序、检索、统计和多表操作》主要涵盖了在数据库管理中至关重要的几个方面,包括数据的分类排序、索引排序、数据检索、数据统计以及多个表的操作。这些内容对于理解和高效处理数据库至关重要。 5.1 ...

    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`等...

    SQL重建索引.rar

    要批量重建所有索引,可以编写一个存储过程,遍历所有的表和索引,逐个执行重建操作。"SQL重建索引.txt"可能就包含了这样的脚本。 4. **考虑重建选项**:重建索引时,可以指定填充因子(填充因子决定了新索引页的...

Global site tag (gtag.js) - Google Analytics