【发布时间】:2021-10-27 14:47:39
【问题描述】:
我的 PostgreSQL 数据库中有一个表,它变得很大,里面有很多无用的行。 由于这些无用的行占我表数据的 99.9%(大约 330 万行),我想知道删除它们是否会对我的数据库产生不良影响:
我知道此操作可能需要一些时间,并且我将能够在维护操作期间阻止对表的写入 但我想知道数据的这种巨大变化是否也会影响操作本身之后的性能。
我找到了诸如创建新表/使用 TRUNCATE 删除所有行之类的解决方案,但由于此操作是特定的且一次性完成,因此我希望能够选择最适合的解决方案。
我知道 Postgre SQL 具有 VACUUM 机制,但我不是 DBA 专家:谁能确认此删除不会影响我的表完整性/数据结构,如果需要新数据,释放的空间将被回收?
PostgreSQL 11.12,在 AWS RDS 上具有默认设置。我的表上没有任何索引,删除行的条件不会基于 PK
【问题讨论】:
-
创建表/截断/插入部分很可能是您可以获得的最快方法。甚至创建新表,删除旧表重命名新表。
-
删除您的数据不会对表而不是结构产生负面影响,对数据表完整性产生负面影响(假设定义了正确的 FK),如果“删除”行违反它,Postgres 将中止整个过程。也就是说,在删除之前进行备份仍然不是一个坏主意。一旦完成运行
vacuum full analyze。那么你应该准备好了。 BTW:330 万行不算大,可能上端很小。
标签: postgresql