Postgresql优化删除范围

时间:2014-06-03 21:10:54

标签: postgresql

我能够将删除范围从大约3分钟缩短到3-7秒。但是我不确定我是否遵循删除信息的理想路线。从我一直在阅读的理想删除方法如下:

  1. 删除所有外键限制。
  2. 删除数据。
  3. 重新添加外键限制。
  4. 然而,由于我们还想删除外键中的信息,所以这确实有点乱。所以我得出了以下解决方案。

    1. 删除所有外键限制。
    2. 获取正在删除的所有ID的列表。
    3. 列表中的Foreach id
      • 从ID匹配的table1中删除
      • 从ID2匹配的table2中删除
      • 从ID3匹配的table3中删除
      • 从表格4中删除ID匹配
      • 从表格5中删除ID匹配
    4. 重新添加外键限制。
    5. 似乎时间锁定正在执行foreach循环并从每个表中删除。在postgres中有没有办法使用并行性从表中删除?或者我应该尝试删除id的组而不是单个id?

      我还在运行delete语句之前在ID上创建索引和聚类。

      我愿意接受任何建议。

1 个答案:

答案 0 :(得分:1)

看起来我的查询过于复杂了一点。我能够通过以下步骤解决它。

  1. 为每个我知道的列创建索引将在每个表中查询。
  2. 在运行查询之前,在索引上运行集群会大大缩短时间。
  3. 我是postgres的新手,聚集索引与您习惯使用的SQL Server类似但不同。有关详细信息,请参阅Cluster文档。