首頁  >  文章  >  資料庫  >  如何在不中斷網站營運的情況下有效刪除數百萬條 MySQL 行?

如何在不中斷網站營運的情況下有效刪除數百萬條 MySQL 行?

Susan Sarandon
Susan Sarandon原創
2024-11-06 08:39:03450瀏覽

How to Efficiently Delete Millions of MySQL Rows Without Disrupting Site Operations?

高效刪除數百萬條MySQL 行

由於潛在的表鎖定問題,從MySQL 表中刪除大量資料可能會帶來挑戰。本文研究了一種常見場景,即必須在不中斷網站操作的情況下刪除大量重複資料行。

挑戰

這種情況的主要障礙是冗長的執行單一查詢刪除數百萬行時施加的表鎖。這可能會停止涉及該表的所有其他操作,從而導致站點不穩定。

潛在的解決方案

為了緩解鎖定問題,有兩種主要方法可用:

  1. 迭代刪除: 這涉及建立一個腳本,在循環中執行多個較小的刪除查詢,從而限制每個查詢受影響的行數。雖然這避免了單一查詢鎖定,但它仍然會增加資料庫負載並延長執行時間。
  2. 表重建:另一種方法是重命名有問題的表,建立一個空的替換表表,對重命名的表執行清理,最後將表重命名回來並合併數據。這種方法可以最大限度地減少中斷,但會引入額外的步驟,特別是在處理報表或複雜資料類型時。

最佳化的解決方案

為了獲得最佳性能,更高效的解決方案解決方案是利用帶有循環和限制子句的增量刪除方法。這涉及以下步驟:

DELETE FROM `table`
WHERE (whatever criteria)
ORDER BY `id`
LIMIT 1000

迭代查詢,直到不再有行受到影響,迭代之間短暫暫停以防止資料庫過載。這種方法有效地以可管理的批次刪除數據,同時允許其他查詢並發執行,從而減少表鎖定時間和整體執行時間。

以上是如何在不中斷網站營運的情況下有效刪除數百萬條 MySQL 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn