按 ID 高效能刪除數百萬行 PostgreSQL
刪除數百萬資料庫行會嚴重影響效能。本文探討了使用 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
不會觸發 ON DELETE
觸發器。 VACUUM
(或VACUUM FULL ANALYZE
)對於回收磁碟空間和最佳化表大小至關重要。 以上是PostgreSQL中如何透過ID高效率刪除數百萬資料庫行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!