Mysql

每月從數據庫中刪除

  • August 15, 2022

我有這個 mysql 命令,我試圖按年刪除數據庫表中的行,但是伺服器崩潰並且 mysql 在發生這種情況後正在回滾。

我怎樣才能使這項工作單獨刪除幾個月?例如,如果我想在 2 次單獨的執行中刪除所有 2019/11 和 2011/11,而不是一次性刪除 2019 年的全年?每年大約有 1.000.000 行?

dt 行的格式為“2019-08-13 10:36:11”

DELETE FROM sptfy_sptfy.stats WHERE dt < NOW() - INTERVAL 1 YEAR

MySQL 中事務的大小有一個實際限制。人們解決這個問題的方法是執行一系列刪除的行數較少。

DELETE FROM sptfy_sptfy.stats WHERE dt < NOW() - INTERVAL 1 YEAR LIMIT 1000;

您可以反復執行該語句並檢查受刪除影響的行數。最終你會嘗試一個批次,它會報告零行受影響,然後你就完成了(直到下個月)。

如果需要,您可以嘗試看看是否可以使用更大的批量,但為什麼要麻煩呢?

PARTITION按月分錶,使用PARTITION ... BY RANGE(TO_DAYS(...)) ThenDROP PARTITION每月一次;它對於任何大小的桌子都非常快。

更多: 分區

引用自:https://dba.stackexchange.com/questions/315597