[mysql]清除單表大量數據方法(需保留部分數據)


大半夜的在刪除線上的日志數據,需要清理的大概有1億八千萬條。。。任務艱巨。

畢業前沒學過數據庫,所以對於如何清理大量數據還真一時不知道該怎么辦才好。剛開始確實想過對表進行重命名的方式來處理,不過當時因為想到還有數據需要保存且對數據庫的了解不夠所以作罷。

一般情況下刪除數據是使用delete,這個是最普通但是也是效率最低的一個。

還有一個就是truncate,這個操作會把表中所有的數據給清除掉。(如果是要清空數據的話這個效率最高)

第三個就是我這么晚我為什么還在這寫這篇不能算博文的文章吧。

前面說過我之前想到過用對表進行重命名的方法清除數據,今天google的時候發現了一個寫的很好的示例。原文不讓看,還好google機器人可以看。

下面的是實現方法:

  1. Select the rows not to be deleted into an empty table that has the same structure as the original table:

    INSERT INTO t_copy SELECT * FROM t WHERE ... ; //把要刪除大量數據的表中不需要刪除的數據轉存到另外一張表中
  2. Use RENAME TABLE to atomically move the original table out of the way and rename the copy to the original name:

    RENAME TABLE t TO t_old, t_copy TO t;//同時重明明兩張表,間接實現數據刪除操作
  3. Drop the original table:

    DROP TABLE t_old; //視情況而定吧,我清理數據是因為業務慢了,但是既然轉存之后不會影響業務也就沒刪除轉存出來的數據。

整個清理數據的過程我用了大概一分鍾左右,如果delete的話。。。你懂的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM