📜  PostgreSQL删除索引

📅  最后修改于: 2020-11-30 09:35:52             🧑  作者: Mango

PostgreSQL删除索引

在本节中,我们将了解PostgreSQL Drop Index的工作以及Drop index命令的示例

为什么我们使用PostgreSQL Drop index命令?

PostgreSQL中Drop index命令用于删除现有索引。如果我们删除索引,它将改善性能。

PostgreSQL Drop Index命令的语法

删除Index命令的语法如下:

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

在上面的语法中,我们使用了以下参数,如下表所示:

Parameters Description
index_name It is used to define the name of the index, which we want to delete it. And it should be written after the DROP INDEX command.
IF EXISTS If we try to drop a non-existent index, it will raise an error in the output. Therefore, we can use the IF EXISTS option to resolve this error.
CASCADE The CASCADE option is used in the index, which contains the dependent objects. And the CASCADE option will automatically remove these objects and all the objects, which rely on those objects.
RESTRICT The RESTRICT option inform PostgreSQL to drop the index if any objects rely on it. By default, the DROP INDEX command uses the RESTRICT option.

同时

如果我们实现DROP INDEX命令,则PostgreSQL在表上获得排他锁,并阻止其他访问,直到索引删除完成。

在这种情况下,我们可以使用CONCURRENTLY选项强制使语句等待直到矛盾的交易结束再消除索引。

DROP INDEX同时包含一些边界:

  • 同时使用DROP INDEX时,不支持CASCADE选项。
  • 如果我们同时使用DROP INDEX,也不支持在事务块中实现。

注意:我们可以使用逗号(,)分隔索引,并同时删除多个索引,如下图所示:

DROP INDEX index_name, index_name2,... ;

PostgreSQL DROP INDEX的示例

让我们看一个示例,以了解PostgreSQL DROP Index命令的工作。

为此,我们采用了Employee表,该表是在PostgreSQL教程的前面部分中创建的。

Employee表包含各种列,例如emp_id,employee_name,phone和address

一旦执行下面的SELECT命令,就可以看到Employee表中存在的数据,如下面的屏幕快照所示:

SELECT * FROM Employee;

输出量

执行上述命令后,我们将获得以下输出:

现在,我们为Employee表的Address列创建一个索引,如以下命令所示:

CREATE INDEX idex_emp_address 
ON Employee (address);

输出量

执行完上述命令后,我们将获得以下消息窗口,该窗口显示Idex_emp_address已成功创建。


注意:有时,命令优化器不使用索引。

在下面的示例中,我们可以使用以下命令来标识地址Boston的员工:

SELECT * FROM Employee
WHERE address = 'Boston';

输出量

执行上述命令后,我们将获得以下输出,我们在其中成功识别出地址为波士顿的那些雇员。

在上面的命令中,我们没有使用idex_emp_address索引,该索引在PostgreSQL索引教程的PostgreSQL创建索引的前面部分中指定,如下面的EXPLAIN命令所示:

EXPLAIN SELECT *
FROM Employee
WHERE address = 'Boston';

输出量

执行上述命令后,我们将获得以下输出,该输出显示Employee表的查询计划。

之所以发生这种情况,是因为查询开发人员认为这是扫描整个表以查找行的理想选择。

因此,在这种情况下,使用idex_emp_address不利。这就是为什么我们在以下命令的帮助下将其删除:

DROP INDEX idex_emp_address;

输出量

执行上述命令后,我们将获得以下消息,该消息显示idex_emp_address索引已成功删除

总览

PostgreSQL Drop Index部分中,我们学习了以下主题:

  • 我们了解PostgreSQL drop Index命令,该命令用于删除特定表的Index。