最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn)

 更新時(shí)間:2025年03月30日 10:24:28   作者:樹欲靜而風(fēng)不止  
在MySQL中刪除一個(gè)大表中的數(shù)據(jù)時(shí),需要特別注意操作的性能和對(duì)系統(tǒng)的影響,本文主要介紹了Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

1、需求

老項(xiàng)目,實(shí)時(shí)數(shù)據(jù)還是用mysql去存儲(chǔ)的,而且又沒有定時(shí)去清理數(shù)據(jù)的程序。目前這些實(shí)時(shí)數(shù)據(jù)只需保留近半年的即可。

其他幾張實(shí)時(shí)表數(shù)據(jù)量沒有這么夸張。

我隨即用

delete from table_name where id < 39000000 limit 10000

但是幾億條記錄用這個(gè)方法太慢了。

2、方案

雖然之前也處理過類似問題,但還是隨手問了一下AI,有無更優(yōu)解。

在MySQL中刪除一個(gè)大表(例如含有幾億條記錄)中的數(shù)據(jù)時(shí),需要特別注意操作的性能和對(duì)系統(tǒng)的影響。如果您的目標(biāo)是刪除半年前的數(shù)據(jù),您可以采用以下幾種策略來高效地完成這項(xiàng)任務(wù):

1. 使用 DELETE 語句分批刪除

一種常見的方法是使用 DELETE 語句,并通過分批刪除數(shù)據(jù)來減輕數(shù)據(jù)庫(kù)的壓力。這可以通過在 DELETE 語句中添加 LIMIT 子句來實(shí)現(xiàn)。

示例 SQL 語句

-- 定義每批刪除的數(shù)量
SET @batch_size = 100000; -- 每次刪除 10 萬條記錄
SET @counter = 0;

-- 確定半年前的日期
SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);

-- 分批刪除數(shù)據(jù)
REPEAT
    DELETE FROM your_table
    WHERE time < @six_months_ago
    LIMIT @batch_size;
    SET @counter = @counter + 1;
UNTIL @counter = 0 END REPEAT;

2. 使用 INPLACE ALTER TABLE

對(duì)于InnoDB表,可以使用 ALTER TABLE 來刪除數(shù)據(jù),這通常比 DELETE 更快。然而,此方法要求您能夠確定刪除的行不會(huì)被引用(例如通過外鍵)。此外,這種方法可能不是所有版本的MySQL都支持。

示例 SQL 語句

-- 確定半年前的日期
SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);

-- 創(chuàng)建一個(gè)臨時(shí)表,只包含需要保留的數(shù)據(jù)
CREATE TABLE temp_table AS SELECT * FROM your_table WHERE time >= @six_months_ago;

-- 刪除原始表
DROP TABLE your_table;

-- 重命名臨時(shí)表為原始表的名字
RENAME TABLE temp_table TO your_table;

3. 使用 TRUNCATE TABLE 和重新插入數(shù)據(jù)

如果您可以接受刪除所有數(shù)據(jù)并重新插入數(shù)據(jù),那么可以使用 TRUNCATE TABLE 來清空整個(gè)表,然后只插入最近六個(gè)月的數(shù)據(jù)。這種方法適用于那些可以承受完全清空表的場(chǎng)景。

-- 確定半年前的日期
SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);

-- 清空表
TRUNCATE TABLE your_table;

-- 重新插入最近六個(gè)月的數(shù)據(jù)
INSERT INTO your_table
SELECT * FROM your_table
WHERE time >= @six_months_ago;

注意事項(xiàng)

  • 備份數(shù)據(jù):在執(zhí)行任何大規(guī)模刪除操作之前,一定要做好數(shù)據(jù)備份以防萬一。
  • 監(jiān)控性能:在執(zhí)行刪除操作時(shí),應(yīng)密切監(jiān)控MySQL服務(wù)器的性能指標(biāo),如CPU使用率、磁盤I/O等。
  • 禁用外鍵檢查:如果表上有外鍵約束,可以暫時(shí)禁用外鍵檢查。
  • 禁用自動(dòng)提交:在開始刪除操作之前,可以關(guān)閉自動(dòng)提交,然后在刪除完成后手動(dòng)提交事務(wù)。

示例 SQL 腳本

以下是一個(gè)完整的SQL腳本示例,使用分批刪除的方式刪除半年前的數(shù)據(jù):

-- 設(shè)置變量
SET @batch_size = 100000; -- 每次刪除 10 萬條記錄
SET @counter = 0;

-- 確定半年前的日期
SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);

-- 分批刪除數(shù)據(jù)
REPEAT
    DELETE FROM your_table
    WHERE time < @six_months_ago
    LIMIT @batch_size;
    SET @counter = @counter + 1;
UNTIL @counter = 0 END REPEAT;

總結(jié)

選擇哪種方法取決于您的具體需求和資源。如果數(shù)據(jù)量非常大,建議先在一個(gè)較小的數(shù)據(jù)集上測(cè)試所選方法的性能,然后再應(yīng)用到整個(gè)表。此外,在執(zhí)行此類操作時(shí),最好在業(yè)務(wù)低峰期進(jìn)行,以減少對(duì)應(yīng)用程序的影響。

看來也沒有更好的辦法,還是這些老辦法。

3、實(shí)戰(zhàn)

先新建一張copy的表。

注意:新建表的自增索引ID,還是會(huì)從1開始的。

CREATE TABLE new_table_name LIKE existing_table_name;

接下來二個(gè)方案

1、實(shí)時(shí)數(shù)據(jù)不能停的,先改名,把名稱互換。等數(shù)據(jù)插入一波,再啟動(dòng)遷移。主要是為了插入一波后自增索引自動(dòng)調(diào)整。避免沖突

RENAME TABLE temp TO users;

2、實(shí)時(shí)數(shù)據(jù)能停的,那么就先停掉。再名稱互換,再改動(dòng)自增索引起點(diǎn)值。這時(shí)候其實(shí)可以開啟插入程序了。

3.1轉(zhuǎn)移

一張表近半年的數(shù)據(jù)是從390000000差不多開始。那么就好處理了

幾千萬條數(shù)據(jù)也是比較快的。

另一張表更大,有近1-2個(gè)億的數(shù)據(jù),那么我是2kw-3kw 批量一次,也就半小時(shí)。即可完成。

到此這篇關(guān)于Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql刪除億條數(shù)據(jù)表部分?jǐn)?shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql觸發(fā)器同步表的數(shù)據(jù)方式

    mysql觸發(fā)器同步表的數(shù)據(jù)方式

    這篇文章主要介紹了mysql觸發(fā)器同步表的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql database manual(mysql數(shù)據(jù)庫(kù)手冊(cè))

    mysql database manual(mysql數(shù)據(jù)庫(kù)手冊(cè))

    mysql database manual(mysql數(shù)據(jù)庫(kù)手冊(cè)),使用mysql的朋友可以參考下。
    2011-09-09
  • MySQL慢查詢?nèi)罩镜呐渲门c使用教程

    MySQL慢查詢?nèi)罩镜呐渲门c使用教程

    慢查詢?nèi)罩居糜谟涗浺恍┻^慢的查詢語句,可以幫助管理員分析問題所在,下面這篇文章主要給大家介紹了關(guān)于MySQL慢查詢?nèi)罩镜呐渲门c使用教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-09-09
  • linux下mysql數(shù)據(jù)庫(kù)單向同步配置方法分享

    linux下mysql數(shù)據(jù)庫(kù)單向同步配置方法分享

    mysql數(shù)據(jù)庫(kù)單向同步又叫做主從復(fù)制,是通過二進(jìn)制日志文件完成的,注意:mysql 數(shù)據(jù)庫(kù)的版本,兩個(gè)數(shù)據(jù)庫(kù)版本要相同
    2012-06-06
  • MySQL基本表查詢操作匯總之單表查詢+多表操作大全

    MySQL基本表查詢操作匯總之單表查詢+多表操作大全

    本文全面介紹了MySQL單表查詢與多表操作的關(guān)鍵技術(shù),包括基本語法、高級(jí)查詢、表別名使用、多表連接及子查詢等,并提供了豐富的實(shí)例,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • MySQL一鍵安裝Shell腳本的實(shí)現(xiàn)

    MySQL一鍵安裝Shell腳本的實(shí)現(xiàn)

    本文主要介紹了MySQL一鍵安裝Shell腳本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • MySQL分頁(yè)查詢優(yōu)化的實(shí)踐指南

    MySQL分頁(yè)查詢優(yōu)化的實(shí)踐指南

    在日常業(yè)務(wù)開發(fā)中,分頁(yè)查詢是高頻操作,比如列表頁(yè)數(shù)據(jù)展示、歷史記錄查詢等,但當(dāng)數(shù)據(jù)量達(dá)到萬級(jí)以上時(shí),普通的limit分頁(yè)往往會(huì)出現(xiàn)性能瓶頸,本文基于實(shí)際測(cè)試場(chǎng)景,詳細(xì)分析MySQL分頁(yè)查詢優(yōu)化的實(shí)踐指南,需要的朋友可以參考下
    2025-12-12
  • mysql配置環(huán)境變量實(shí)踐(win10)

    mysql配置環(huán)境變量實(shí)踐(win10)

    文章介紹了如何在Windows 10系統(tǒng)中配置MySQL環(huán)境變量,包括設(shè)置MYSQL_HOME和Path變量,并展示了如何在cmd中驗(yàn)證配置
    2026-01-01
  • mysql服務(wù)性能優(yōu)化—my.cnf_my.ini配置說明詳解(16G內(nèi)存)

    mysql服務(wù)性能優(yōu)化—my.cnf_my.ini配置說明詳解(16G內(nèi)存)

    這篇文章主要介紹了mysql服務(wù)性能優(yōu)化—my.cnf_my.ini配置說明詳解(16G內(nèi)存),需要的朋友可以參考下
    2016-05-05
  • MySQL 序列(AUTO_INCREMENT)的使用示例

    MySQL 序列(AUTO_INCREMENT)的使用示例

    本文主要介紹了MySQL 序列(AUTO_INCREMENT)的使用示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11

最新評(píng)論

印江| 贞丰县| 仪陇县| 清远市| 久治县| 将乐县| 金华市| 分宜县| 山东省| 宁远县| 遵义县| 白朗县| 徐闻县| 荥阳市| 宁德市| 吴江市| 永和县| 彩票| 丹寨县| 大渡口区| 苍溪县| 延津县| 库伦旗| 同德县| 得荣县| 安溪县| 黔西| 石渠县| 新野县| 莫力| 新田县| 翼城县| 浦县| 海安县| 吉木乃县| 凯里市| 汤原县| 双流县| 正定县| 沾化县| 白朗县|