首页 > 数据库 > mysql教程 > 如何通过postgresql中的ID有效地删除数百万个数据库行?

如何通过postgresql中的ID有效地删除数百万个数据库行?

Susan Sarandon
发布: 2025-01-24 11:46:09
原创
419 人浏览过

How Can I Efficiently Delete Millions of Database Rows by ID in PostgreSQL?

>高性能删除数百万的postgresql行,ID

>

删除数百万个数据库行会严重影响性能。本文研究了使用ID列表从PostgreSQL数据库中删除大约200万行的有效策略,并解决了常见的瓶颈。

>

挑战:

该任务涉及根据提供的ID列表删除大型数据集。 诸如批处理删除和IN子句查询之类的标准方法通常证明对此量表效率低下。

最佳解决方案:

最佳方法取决于几个因素:

  • >并发访问:不存在并发写入大大简化了过程。
  • 索引:暂时删除不必要的索引(不必要的索引(不需要删除的索引),然后重建它们可以提高速度。
  • > 触发器:>在删除过程中停用或删除触发器可以显着提高性能。
  • 外键:仔细管理外键关系;考虑暂时的禁用或修改以促进删除。
  • > autovacuum:跑步
  • >
  • >内存方法(对于较小的剩余数据集):如果删除后剩余的数据大大小于原始表,并且适合RAM中的数据,请考虑使用这种高效的方法:> VACUUM ANALYZE
  • 这可以保留外国键,视图和其他依赖项,从而产生了干净和优化的表。
vs.
<code class="language-sql">BEGIN;
SET LOCAL temp_buffers = '1000MB';
CREATE TEMP TABLE tmp AS
SELECT t.*
FROM   tbl t
LEFT   JOIN del_list d USING (id)
WHERE  d.id IS NULL;  -- copy remaining rows
TRUNCATE tbl;             -- clear the table
INSERT INTO tbl SELECT * FROM tmp;        -- re-insert remaining data
COMMIT;</code>
登录后复制

对于较小的表格,

>可能比
    更快,因为它维护触发器和外键约束。
  • DELETE关键因素:TRUNCATE DELETE 除非所有参考表也同时截断,TRUNCATE

> 不触发

触发器。
    >
  • >后删除TRUNCATE(或
  • )对于回收磁盘空间和优化表尺寸至关重要。
  • TRUNCATE

以上是如何通过postgresql中的ID有效地删除数百万个数据库行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板