Postgresql Postgres SQL优化删除范围

Postgresql Postgres SQL优化删除范围,postgresql,Postgresql,我已经能够获得从大约3分钟到3-7秒的删除范围。但是,我不确定我是否遵循了删除信息的理想路线。根据我所阅读的内容,理想的删除方法如下: 拆下所有外键约束装置 删除数据 重新添加外键约束 然而,这确实有点混乱,因为我们还想删除外键中的信息。因此,我得出以下解决方案 拆下所有外键约束装置 获取要删除的所有id的列表 列表中的Foreach id 从ID匹配的表1中删除 从ID匹配的表2中删除 从ID匹配的表3中删除 从ID匹配的表4中删除 从ID匹配的表5中删除 重新添加外键约束 时间锁定似乎是

我已经能够获得从大约3分钟到3-7秒的删除范围。但是,我不确定我是否遵循了删除信息的理想路线。根据我所阅读的内容,理想的删除方法如下:

  • 拆下所有外键约束装置
  • 删除数据
  • 重新添加外键约束
  • 然而,这确实有点混乱,因为我们还想删除外键中的信息。因此,我得出以下解决方案

  • 拆下所有外键约束装置
  • 获取要删除的所有id的列表
  • 列表中的Foreach id
    • 从ID匹配的表1中删除
    • 从ID匹配的表2中删除
    • 从ID匹配的表3中删除
    • 从ID匹配的表4中删除
    • 从ID匹配的表5中删除
  • 重新添加外键约束
  • 时间锁定似乎是执行foreach循环并从每个表中删除。在postgres中,有没有一种方法可以使用并行性从表中删除?或者我应该尝试使用组id而不是单个id删除吗

    在运行delete语句之前,我还在ID上创建索引和集群


    我愿意接受任何建议。

    看来我把问题复杂化了一点。我可以通过以下步骤解决它

  • 为我知道将在每个表中查询的每个列创建索引
  • 在运行查询之前,在索引上运行集群极大地缩短了时间

  • 我是postgres的新手,聚集索引与SQL Server相似但不同。有关更多信息,请参阅文档。

    我不明白为什么要在实际应用外键时删除外键;他们慢吗?我不明白为什么它们比手动执行相同的任务要慢,只是为了确认:所有相关列都被索引了吗?(所有ID列和引用它们的列)所有相关列都被索引。当我删除而不删除外键时,查询执行大约需要3-5分钟。然而,通过手动运行它们,我能够在3-7秒的时间内运行它们。不确定到底有什么区别。我可以在0.07左右在SQL server中执行相同的查询,因为级联删除似乎更有效。在我看来,您的Postgres表的设置似乎有问题,因为它不应该太慢。可以发布主表和其中一个子表的创建表脚本吗?()(也可能值得尝试使用一个子表,然后使用两个子表,以此类推,以缩小问题范围)您是否一次删除一项?如果可能,尝试使用批处理或单个语句。我不知道你是用哪种语言编写的,但大多数语言都有批处理语句的能力,通常在后台将它们转换成更高效的单个语句。