DROP INDEX 语句

使用 DROP INDEX 语句删除索引。

该语句是 SQL ANSI/ISO 标准的扩展。

语法

元素 描述 限制 语法
index 要删除的索引的名称 必须存在于当前数据库中 标识符
owner 索引所有者的名称 必须拥有此索引 所有者名称

用法

在典型的联机事务处理(OLTP)环境中,并发应用程序连续到执行 DML 操作的数据库服务器。对于每个查询,优化程序选择基于现有索引、统计和伪指令的计划。然而,在经过众多 OLTP 事务后,所选计划可能不再是查询执行的最佳计划。在这种情况下,删除低效的索引有时可以改进性能。

您必须是 index 的所有者或者拥有 DBA 权限才可使用 DROP INDEX 语句。以下示例删除了 joed 所拥有的索引 o_num_ixstores_demo 数据库必须是当前数据库。
DROP INDEX stores_demo:joed.o_num_ix; 
您不能使用 DROP INDEX 语句删除唯一约束,也不能删除支持约束的索引;必须使用 ALTER TABLE . . . DROP CONSTRAINT 语句来删除该约束。当您删除约束时,数据库服务器自动删除其存在仅仅是为了支持该约束的任何索引。如果您试图使用 DROP INDEX 删除由唯一的约束共享的索引,数据库服务器会在 sysindexes 系统目录表中给指定的索引重命名,声明一个以下面的格式出现的新名称:
[space]<tabid>_<constraint_id>

这里 tabid constraint_id 分布来自 systables sysconstraints 系统目录表,则 sysconstraints.idxname 列可能更新为类似以下的内容:" 121_13" (其中引号表示空格)。如果这个索引是一个唯一索引,且只有参考约束共享它,则在重新命名之后会降级该索引为一个重复索引。

在某些上下文中,DROP INDEX 语句的替代方法是 SET Database Object Mode 语句,它可以禁用指定的索引而不将其从系统目录中删除。有关此 SQL 语句的更多信息(也可以启用当前禁用的索引),请参阅 SET Database Object Mode 语句

如果您包含可选的 IF EXISTS 关键字,则如果未在当前数据库中注册指定名称的索引,则数据库服务器不采取任何操作(而不是向应用程序发送异常)。

示例

stores_demo 数据库中的索引可以使用以下语句删除:
DROP INDEX zip_ix;
如果必要,可以将索引名指定为完全限定的四部分对象名称(database@instance:owner.indexname),如下例所示:
DROP INDEX stores_demo@prod:"gbasedbt".zip_ix ;
现有函数的详细信息可以在 sysprocedures 系统目录表中找到,如下例所示:
SELECT idxname FROM sysindices ;