更新时间:2025-09-12 GMT+08:00
分享

DROP INDEX

功能描述

删除索引。

注意事项

  • 索引的所有者、索引所在模式的所有者、拥有索引所在表的INDEX权限的用户或者被授予了DROP ANY INDEX权限的用户有权限执行DROP INDEX命令,三权分立关闭时的系统管理员默认拥有此权限。
  • 对于全局临时表,当某个会话已经初始化了全局临时表对象(包括创建全局临时表和第一次向全局临时表内插入数据)时,其他会话无法执行该表上索引的删除操作。

语法格式

DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] 
    index_name [, ...] [ CASCADE | RESTRICT];

DROP INDEX index_name [, ...] [CASCADE | RESTRICT] ON table_name [algorithm_option | lock_option];

参数说明

  • CONCURRENTLY

    以不加锁的方式删除索引。删除索引时,一般会阻塞其他语句对该索引所依赖表的访问。加此关键字,在删除过程中可避免阻塞。

    此选项只能指定一个索引的名称, 并且CASCADE选项不支持。

    普通DROP INDEX命令可以在事务内执行,但是DROP INDEX CONCURRENTLY不可以在事务内执行。

  • IF EXISTS

    如果指定的索引不存在,则发出一个notice而不是抛出一个ERROR。

  • index_name

    要删除的索引名。

    取值范围:已存在的索引。

  • CASCADE | RESTRICT
    • CASCADE:表示允许级联删除依赖于该索引的对象。
    • RESTRICT:表示有依赖于此索引的对象存在,则该索引无法被删除。此选项为缺省值。

示例

-- 建表
m_db=# CREATE TABLE test1_index (id INT, name VARCHAR(20));
m_db=# CREATE INDEX idx_test1 on test1_index (id);

-- 删除索引
m_db=# DROP INDEX IF EXISTS idx_test1 CASCADE;

-- 删除表
m_db=# DROP TABLE test1_index;

相关链接

ALTER INDEXCREATE INDEX

相关文档