【问题标题】:PostgreSql delete time exceededPostgreSql 删除时间超出
【发布时间】:2012-09-12 16:52:13
【问题描述】:

我有一个简单的 PostgreSQL 表,其中包含一个名为 id 的主键和大约 20 个条目。

执行以下操作需要 60 到 70 秒。

DELETE FROM user WHERE id = '20'

简单的SELECT 查询在不到 10 毫升的时间内执行,这很好。

DELETE 查询上运行EXPLAIN 时,输出如下:

"Seq Scan on user  (cost=0.00..1.26 rows=1 width=6)"
"  Filter: ((id)::text = '20'::text)"

对于那些需要这么长时间的删除查询,我找不到任何解释。我有什么遗漏吗?

【问题讨论】:

  • 你检查过 pg_locks 是否有锁在这条记录上?
  • @FrankHeikens 是的.. 没有
  • 第一个猜测:未索引的外键引用大表中的用户。

标签: sql postgresql


【解决方案1】:

一个可能的原因是您有一个引用此表的外键,该表在外键表达式上没有可用索引。因为你说主键的类型不规则,可能是外键的类型和主键的类型不匹配。

编辑:一开始我没有注意到你的表太小以至于顺序扫描是正常的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多