搜尋
首頁資料庫mysql教程PostgreSQL中如何透過ID高效率刪除數百萬資料庫行?

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

按 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;

這保留了外鍵、視圖和其他依賴項,從而產生乾淨且最佳化的表。

  • DELETETRUNCATE: 對於較小的表,DELETE 可能比 TRUNCATE 更快,因為它維護觸發器和外鍵約束。

主要考慮因素:

  • TRUNCATE 不能用於具有外鍵引用的表,除非所有引用表也同時被截斷。
  • TRUNCATE 不會觸發 ON DELETE 觸發器。
  • 刪除後VACUUM(或VACUUM FULL ANALYZE)對於回收磁碟空間和最佳化表大小至關重要。

以上是PostgreSQL中如何透過ID高效率刪除數百萬資料庫行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL如何在Linux系統上安裝MySQL如何在Linux系統上安裝Apr 29, 2025 pm 03:57 PM

在Linux上安裝MySQL可以通過包管理器進行,具體步驟如下:1.在Ubuntu上,使用apt更新包列表並安裝MySQL服務器;2.在CentOS上,使用yum安裝MySQL社區版並啟動服務。安裝後需進行基本配置,如設置root密碼和創建數據庫及用戶。

MySQL視圖的創建和使用場景MySQL視圖的創建和使用場景Apr 29, 2025 pm 03:54 PM

MySQL視圖是基於SQL查詢生成的虛擬表。 1.創建視圖:使用CREATEVIEW語句結合SELECT查詢。 2.使用場景:簡化複雜查詢、數據抽象和確保數據一致性。 3.優化策略:簡化底層查詢、使用索引和考慮物化視圖。

MySQL中創建數據庫時指定字符集和排序規則MySQL中創建數據庫時指定字符集和排序規則Apr 29, 2025 pm 03:51 PM

在MySQL中創建數據庫時,應指定字符集和排序規則以確保數據準確性和提升查詢性能。 1)使用CREATEDATABASEmy_databaseCHARACTERSETutf8mb4COLLATIONutf8mb4_unicode_ci命令創建數據庫,選擇utf8mb4字符集和utf8mb4_unicode_ci排序規則。 2)utf8mb4支持更多Unicode字符,而utf8mb4_unicode_ci提供不區分大小寫的比較。 3)確保應用層和數據庫層使用相同的字符集和排序規則,避免潛在問題。

如何在MySQL中進行數據的排序和排名如何在MySQL中進行數據的排序和排名Apr 29, 2025 pm 03:48 PM

在MySQL中,排序使用ORDERBY子句,排名使用RANK()、DENSE_RANK()和ROW_NUMBER()函數。 1.排序:使用ORDERBY子句,如SELECT*FROMemployeesORDERBYsalaryDESC;2.排名:使用窗口函數,如SELECTemployee_name,salary,RANK()OVER(ORDERBYsalaryDESC)ASrankFROMemployees;這些操作基於SQL查詢優化器和執行引擎,排序常用快速排序或歸併排序,排名依賴窗口函數計算

MySQL存儲過程的創建和調用方法MySQL存儲過程的創建和調用方法Apr 29, 2025 pm 03:45 PM

要在MySQL中創建和調用存儲過程,需按以下步驟操作:1.創建存儲過程:使用CREATEPROCEDURE語句定義存儲過程,包括名稱、參數和SQL語句。 2.編譯存儲過程:MySQL將存儲過程編譯成可執行代碼並存儲。 3.調用存儲過程:使用CALL語句並傳遞參數。 4.執行存儲過程:MySQL執行其中的SQL語句,處理參數並返回結果。

MySQL服務自動啟動的設置方法MySQL服務自動啟動的設置方法Apr 29, 2025 pm 03:42 PM

MySQL服務可以在Windows、Linux和macOS上設置為自動啟動。 1)在Windows上,使用命令“scconfigmysqlstart=auto”配置。 2)在Linux上,使用“sudosystemctlenablemysql”啟用。 3)在macOS上,創建並加載launchd配置文件實現自動啟動。

如何查看MySQL表的詳細結構信息如何查看MySQL表的詳細結構信息Apr 29, 2025 pm 03:39 PM

查看MySQL表結構的方法包括:1.使用DESCRIBE命令查看列信息;2.使用SHOWCREATETABLE命令查看表的創建語句;3.使用information_schema查詢更詳細信息。這些方法幫助快速了解表結構,提高工作效率。

MySQL在macOS系統的安裝步驟詳解MySQL在macOS系統的安裝步驟詳解Apr 29, 2025 pm 03:36 PM

在macOS上安裝MySQL可以通過以下步驟實現:1.安裝Homebrew,使用命令/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。 2.更新Homebrew,使用brewupdate。 3.安裝MySQL,使用brewinstallmysql。 4.啟動MySQL服務,使用brewservicesstartmysql。安裝後,可通過mysql-u

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境