PostgreSQL 教程: DROP INDEX 删除索引 | 您所在的位置:网站首页 › pgsql索引 › PostgreSQL 教程: DROP INDEX 删除索引 |
摘要:在本教程中,您将学习如何使用 PostgreSQL 的DROP INDEX语句删除现有索引。 PostgreSQL DROP INDEX 语句简介有时,您可能希望从数据库系统中删除现有索引。为此,您可以使用DROP INDEX语句,如下: DROP INDEX [ CONCURRENTLY] [ IF EXISTS ] index_name [ CASCADE | RESTRICT ];在这个语法中: index_name您可以在DROP INDEX子句后指定要删除的索引的名称。 IF EXISTS尝试删除不存在的索引将导致错误。为了避免这种情况,您可以使用IF EXISTS选项。如果您使用IF EXISTS删除不存在的索引,PostgreSQL 只会发出通知,而不是错误。 CASCADE如果索引具有依赖对象,您可以使用CASCADE选项自动删除这些对象,以及依赖于这些对象的所有对象。 RESTRICT如果有任何对象依赖于该索引,RESTRICT选项指示 PostgreSQL 拒绝删除该索引。DROP INDEX默认使用RESTRICT。 请注意,您可以通过用逗号 (,) 分隔索引名称来一次删除多个索引: DROP INDEX index_name, index_name2,... ; CONCURRENTLY当您执行DROP INDEX语句时,PostgreSQL 会获取表上的独占锁并阻止其他访问,直到索引删除完成。 要强制DROP INDEX命令等待冲突事务完成后再删除索引,您可以使用CONCURRENTLY选项。 DROP INDEX CONCURRENTLY有一些限制: 首先,不支持CASCADE选项。 其次,也不支持在事务块中执行。 PostgreSQL DROP INDEX 示例我们将使用示例数据库中的actor表进行演示。 以下语句为actor表的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;该语句按预期删除了索引。 概括 使用 PostgreSQL 的DROP INDEX语句删除索引。 |
CopyRight 2018-2019 实验室设备网 版权所有 |