我有一个有 223 个表的数据库,我必须从其中的 10 个表中删除一些记录,每个表都有 apprx。150 万条记录。这些表每 7 秒存储一次温度。我们已决定删除所有记录,但每分钟的第一条记录除外。所以现在每分钟有 8 条记录,在这个过程之后,它将每分钟存储 1 条超过 3 个月的记录。
我应该通过删除并在之后清空还是截断来做到这一点?还有一些与其中一些表相关的视图。如果我通过截断来做到这一点,那么这些观点之后会起作用吗?
我有一个有 223 个表的数据库,我必须从其中的 10 个表中删除一些记录,每个表都有 apprx。150 万条记录。这些表每 7 秒存储一次温度。我们已决定删除所有记录,但每分钟的第一条记录除外。所以现在每分钟有 8 条记录,在这个过程之后,它将每分钟存储 1 条超过 3 个月的记录。
我应该通过删除并在之后清空还是截断来做到这一点?还有一些与其中一些表相关的视图。如果我通过截断来做到这一点,那么这些观点之后会起作用吗?
如果您没有会禁止您在表上获得排他锁的并发事务,我会:
确保您有足够的 RAM 可用于临时表(仅限本次会议)。阅读
temp_buffers
相关答案:Optimizing bulk update performance in PostgreSQL
这样,视图保持不变。他们会禁止您删除涉及的表。
您也不需要任何吸尘,这种方式根本没有死排。在使用它时,您可能希望对
ORDER BY
行进行INSERT
优化以优化SELECT
性能。此处和此处是密切相关的案例,其中包含有关 SO 的更多详细信息。