gpt4 book ai didi

postgresql - 有效地修剪 postgresql 表

转载 作者:行者123 更新时间:2023-11-29 12:01:25 24 4
gpt4 key购买 nike

我有大约 10 个表有超过 200 万条记录,一个有 3000 万条记录。我想有效地从每个表中删除旧数据。

我的一般算法是:

  • 为每个大表创建一个临时表并用更新的数据填充它
  • 截断原始表
  • 使用以下方法将 tmp 数据复制回原始表:“insert into originaltable (select * from tmp_table)”

但是,将数据复制回来的最后一步花费的时间比我希望的要长。我考虑过删除原始表并使临时表“永久化”,但我丢失了约束/外键信息。

如果我直接从表中删除,则需要更长的时间。鉴于我需要保留所有外键和约束,有没有更快的方法来删除旧数据?

谢谢。

最佳答案

最快的过程可能与您概述的完全一样:

  1. 将新数据复制到临时表中
  2. 删除索引和外键
  3. 删除旧表
  4. 将临时表复制回旧表名
  5. 重建索引和外键。

The Postgres manual也有一些关于性能的建议,可能适用也可能不适用。然而,坦率地说,删除一个表比删除数百万行要快得多(因为每次删除都是逐个元组执行的)并且将数百万行插入到没有约束或索引的表中要快得多(因为每个约束必须检查并且必须为每个记录插入更新每个索引;通过删除所有约束,您将其限制为索引的单个构建和约束的单个验证。

关于postgresql - 有效地修剪 postgresql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com