为什么删除索引比创建它需要更长的时间?

时间:2014-10-13 18:04:35

标签: postgresql indexing

在postgresql中,我为一个大表添加了一个索引,花了大约1秒钟(坦率地说,让我感到惊讶)。

当我去掉索引时,我让它运行> 200秒而不返回,最后取消了放置操作。

CREATE INDEX idx_cservicelocationdivisionstatus_inversed
ON cservicelocationdivisionstatus (cservicelocationdivisionid, startdate, enddate DESC);

花很少的时间,但

DROP INDEX idx_cservicelocationdivisionstatus_inversed;

我已经放弃并取消了。

cservicelocationdivisionstatus有6列和大约310k行数据。

为什么删除索引所需的时间比创建索引要长得多?

编辑:This page表示对于mySql,具有多个索引的表将复制表并重新插入所有行而不删除您正在删除的索引。 (更糟糕的是,使用mySql,如果你在同一个表上删除多个索引,它会为你要删除的每个索引重新复制一次表,而不是聪明并重新复制数据一次而不需要你的所有索引#39;重新下降。)这样的事情会发生在postgres吗?

1 个答案:

答案 0 :(得分:21)

您提到的表格上的索引通常应该能够快速删除(当然比3分钟以上更快)。听起来像表/索引正在使用中,因此无法删除。

您可以通过查询pg_stat_activity表并查找涉及您创建索引的表的活动来确认。