【发布时间】:2014-12-08 09:09:18
【问题描述】:
在 postgresql 中,我为一个大表添加了一个索引,大约花了 1 秒(坦率地说,这让我感到惊讶)。
我去drop索引的时候,让它运行了>200秒没有返回,最后取消了drop操作。
CREATE INDEX idx_cservicelocationdivisionstatus_inversed
ON cservicelocationdivisionstatus (cservicelocationdivisionid, startdate, enddate DESC);
花费很少的时间,但是
DROP INDEX idx_cservicelocationdivisionstatus_inversed;
花了这么长时间,我放弃并取消了。
cservicelocationdivisionstatus 表有 6 列和大约 310k 行数据。
为什么删除索引比创建索引要花这么长时间?
编辑:This page 表示对于 mySql,具有多个索引的表将复制该表并重新插入所有行,而无需删除您要删除的索引。 (更糟糕的是,使用 mySql,如果您在同一个表上删除多个索引,它将为您要删除的每个索引重新复制一次表,而不是在没有所有索引的情况下聪明地重新复制一次数据下降。) postgres 是否会发生这种情况?
【问题讨论】:
-
检查索引/表上的锁:postgresql.org/docs/current/static/monitoring-locks.html 如果查询使用了索引,则不能删除它。
-
参见:在 postgresql 中删除索引 - dba.stackexchange.com/q/49896
标签: postgresql indexing concurrency