📜  PostgreSQL – 删除索引

📅  最后修改于: 2022-05-13 01:57:15.657000             🧑  作者: Mango

PostgreSQL – 删除索引

在 PostgreSQL 中,DROP INDEX语句用于删除现有索引。

Syntax:
DROP INDEX  [ CONCURRENTLY]
[ IF EXISTS ]  index_name 
[ CASCADE | RESTRICT ];

我们来分析一下上面的语法:

  • index_name :这用于 在 DROP INDEX子句后指定要删除的索引的名称。
  • 如果存在:尝试删除不存在的索引将导致错误。为避免这种情况,您可以使用IF EXISTS选项。如果您使用 IF EXISTS删除不存在的索引,PostgreSQL 会发出通知。
  • CASCADE :如果索引具有依赖对象,则使用CASCADE选项自动删除这些对象以及依赖于这些对象的所有对象。
  • RESTRICT: RESTRICT选项指示 PostgreSQL 拒绝删除索引,如果任何对象依赖它。该DROP INDEX使用缺省RESTRICT。
  • CONCURRENTLY:当您执行 DROP INDEX 语句时,PostgreSQL 会获取该表的排他锁并阻止其他访问,直到索引删除完成。要强制命令在删除索引之前等待冲突事务完成,您可以使用 CONCURRENTLY 选项。

出于示例的目的,我们将使用演员 用于演示的示例数据库中的表。

例子:



以下语句为first_name 创建索引 演员专栏 桌子:

CREATE INDEX idx_actor_first_name 
ON actor (first_name);

有时,查询优化器不使用索引。例如,以下语句查找名为“ John”的演员:

SELECT * FROM actor
WHERE first_name = 'John';

查询未使用idx_actor_first_name 之前定义的索引如以下 EXPLAIN 语句中所述:

EXPLAIN SELECT *
FROM actor
WHERE first_name = 'John';

这是因为查询优化器认为只扫描整个表来定位行更为优化。因此, idx_actor_first_name在这种情况下没有用,我们需要将其删除:

DROP INDEX idx_actor_first_name;

输出: