按 ID 高效能刪除數百萬行 PostgreSQL
刪除數百萬資料庫行會嚴重影響效能。本文探討了使用 ID 清單從 PostgreSQL 資料庫中刪除約 200 萬行的有效策略,解決常見瓶頸。
挑戰:
該任務涉及根據提供的 ID 清單刪除大型資料集。 批次刪除和 IN
子句查詢等標準方法對於這種規模通常效率低下。
最優解:
最佳方法取決於幾個因素:
- 並發存取:沒有並發寫入大大簡化了過程。
- 索引:暫時刪除不必要的索引(不包括對刪除至關重要的索引)並在之後重建它們可以提高速度。
- 觸發器:在刪除過程中停用或刪除觸發器可以顯著提高效能。
- 外鍵:精心管理外鍵關係;考慮暫時停用或修改以方便刪除。
-
Autovacuum:提前運作
VACUUM ANALYZE
可以最佳化效能。 - 記憶體中方法(對於較小的剩餘資料集):如果刪除後剩餘的資料遠小於原始表並且適合 RAM,請考慮這種高效的方法:
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;
這保留了外鍵、視圖和其他依賴項,從而產生乾淨且最佳化的表。
-
DELETE
與TRUNCATE
: 對於較小的表,DELETE
可能比TRUNCATE
更快,因為它維護觸發器和外鍵約束。
主要考慮因素:
-
TRUNCATE
不能用於具有外鍵引用的表,除非所有引用表也同時被截斷。 -
TRUNCATE
不會觸發ON DELETE
觸發器。 - 刪除後
VACUUM
(或VACUUM FULL ANALYZE
)對於回收磁碟空間和最佳化表大小至關重要。
以上是PostgreSQL中如何透過ID高效率刪除數百萬資料庫行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

本文討論了使用Drop Table語句在MySQL中放下表,並強調了預防措施和風險。它強調,沒有備份,該動作是不可逆轉的,詳細介紹了恢復方法和潛在的生產環境危害。

本文討論了在PostgreSQL,MySQL和MongoDB等各個數據庫中的JSON列上創建索引,以增強查詢性能。它解釋了索引特定的JSON路徑的語法和好處,並列出了支持的數據庫系統。

文章討論了使用準備好的語句,輸入驗證和強密碼策略確保針對SQL注入和蠻力攻擊的MySQL。(159個字符)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1
好用且免費的程式碼編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境