>高性能删除数百万的postgresql行,ID
>删除数百万个数据库行会严重影响性能。本文研究了使用ID列表从PostgreSQL数据库中删除大约200万行的有效策略,并解决了常见的瓶颈。
>挑战:
该任务涉及根据提供的ID列表删除大型数据集。 诸如批处理删除和IN
子句查询之类的标准方法通常证明对此量表效率低下。
最佳解决方案:
最佳方法取决于几个因素:
VACUUM ANALYZE
<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中文网其他相关文章!