欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 線上數據庫清理數據的方法

 更新時間:2021年03月30日 10:52:54   作者:AsiaYe  
這篇文章主要介紹了MySQL 線上數據庫清理數據的方法,幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下

01 場景分析

 今天下午,開發(fā)的同事提來一個需求,需要在線上要刪除一些數據記錄,簡單看了看數據的分布,大概是要刪除數據表中的兩千七百多萬條記錄,數據表的總記錄是兩千八百多萬,也就是說,要刪除的記錄占了總記錄的絕大部分比重,兩千七百多萬的數據記錄,要是刪除的話,使用的時間是相當長的,對線上的業(yè)務肯定會造成影響。這里將實際的應用案例簡單重構為以下方法:

mysql> select date,count(*) from test.tbl_a  group by date;
+----------+----------+
|   date | count(*) |
+----------+----------+
| |  63103 |
| 20190118 | |
| |  125916 |
| 20190120 |   |
| |  129198 |
| 20190122 |  |
| | 5191247 |
+----------+----------+
 rows in set (13.21 sec)

上面就是重構之后的表的結構,我們可以看到,test數據庫中的表tbl_b按照date分組之后,每個組的數據量都不小,而我們的需求是將date為20190118和20190123的記錄刪除,可以看到這兩種記錄總計有兩千多萬條,占了表中數據的絕大部分,如果直接刪除的話,線上的業(yè)務肯定會受到阻塞。

以下是操作方法,需要注意的是,應用下面的操作方法的前提是:

要刪除的數據占了數據表中的絕大部分。

02 操作辦法

 通過分析,知道剩余的表數據對于全表來說是很小的一部分,這個操作我們分為4步:

1.我們先把剩余的數據存入到另外一個數據庫test1中:

create table test1.tbl_b_new as 
select * from test.tbl_b 
where date in(,,,,);

這個操作的時間只有3s左右;

2.我們在test1數據庫中創(chuàng)建一個同名的表tbl_b,它的結構和test數據庫中的tbl_b數據結構一致:

create table test1.tbl_b like test.tbl_b;

3.緊接著,我們使用數據庫中的rename操作將表test中的表tbl_b和test1中的表tbl_b進行交換,等價于將test數據庫中的表所有數據清除。

RENAME TABLE test.tbl_b  TO test1.tbl_b_bak,
         test1.tbl_b  TO test.tbl_b,
         test1.tbl_b_bak TO test1.tbl_b;

4.再講第一步保存的剩余數據填充到新表中來,如下:

insert into test.tbl_b select * from  test1.tbl_b_new;

03 結果分析

 看上去我們好像把問題搞復雜了,直接刪除的事情,被我們搞的多了好幾個步驟,但是實際上不是這樣的,這一套操作可以幫我們節(jié)省好幾分鐘時間,對線上業(yè)務的影響也更小,原因如下:

  1. 我們使用create table as的方法創(chuàng)建剩余的數據表,這種方法使我們僅對數據表中的少部分數據進行了操作。避免了我們對過多的數據進行掃描。
  2. mysql中對大表進行rename的操作,rename命令會直接修改底層的.frm文件,所以它的速度是相當之快的。

   第二個特點給我們提供了一種思路,在一個很著急的業(yè)務中,要使用一個表的時候,往往不給我們留充足的時間備份表,如果我們想要刪除一個大表里面的數據,而且需要進行相關備份,我們可以通過rename操作迅速處理,然后再想辦法去備份rename之后的表。

    上面的例子中使用create table as 和create table like兩種克隆表的方式,有幾點需要注意:

create table like方式會完整地克隆表結構,但不會插入數據,需要單獨使用insert into或load data方式加載數據
create table as  方式會部分克隆表結構,完整保留數據

    如果有興趣,可以做做試驗進行驗證。

以上就是MySQL 線上數據庫清理數據的方法的詳細內容,更多關于MySQL 線上數據庫清理數據的資料請關注腳本之家其它相關文章!

相關文章

  • 用SELECT... INTO OUTFILE語句導出MySQL數據的教程

    用SELECT... INTO OUTFILE語句導出MySQL數據的教程

    這篇文章主要介紹了用SELECT... INTO OUTFILE語句導出MySQL數據的教程,是MySQL入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • MySQL索引的一些常見面試題大全(2022年)

    MySQL索引的一些常見面試題大全(2022年)

    索引(Index)是幫助MySQL高效獲取數據的數據結構,是對表中一列或多列值進行排序的結構,下面這篇文章主要給大家介紹了關于MySQL索引的一些常見面試題,文中介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • mysql sql_mode="" 的作用說明

    mysql sql_mode="" 的作用說明

    在看discuz源碼時看到了sql_mode="",不知道是干嘛的,猜想是設置模式,但是不清楚是什么模式,于是從網上搜了下,sql_mode="" 的作用
    2011-08-08
  • MySQL為數據表建立索引的原則詳解

    MySQL為數據表建立索引的原則詳解

    這篇文章主要為大家詳細介紹了MySQL為數據表建立索引的原則,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • MySQL創(chuàng)建用戶的三種方法

    MySQL創(chuàng)建用戶的三種方法

    在對MySQL的日常管理和操作中,為了避免有人惡意使用root用戶控制數據庫,盡可能地不用或少用 root 用戶登錄系統,本文主要介紹了MySQL創(chuàng)建用戶的三種方法,感興趣的可以了解一下
    2023-08-08
  • MYSQL 創(chuàng)建函數出錯的解決方案

    MYSQL 創(chuàng)建函數出錯的解決方案

    在程序開發(fā)過程中,大家有沒有遇到過mysql函數不能創(chuàng)建,我是遇到過,是一個很麻煩的問題,上網搜了些相關資料,整理在一起了,供大家參考,幫助那些需要幫助的朋友
    2015-08-08
  • 一篇文章看懂MySQL主從復制與讀寫分離

    一篇文章看懂MySQL主從復制與讀寫分離

    在實際的生產環(huán)境中,由單臺Mysql作為獨立的數據庫是完全不能滿足實際需求的,一般都是通過主從復制的方式來同步數據,再通過讀寫分離(來提升數據庫的并發(fā)負載能力,這篇文章主要給大家介紹了關于MySQL主從復制與讀寫分離的相關資料,需要的朋友可以參考下
    2021-11-11
  • mysql8.0.11數據目錄遷移的實現

    mysql8.0.11數據目錄遷移的實現

    這篇文章主要介紹了mysql8.0.11數據目錄遷移的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • mysql myisam 優(yōu)化設置設置

    mysql myisam 優(yōu)化設置設置

    mysql myisam 優(yōu)化設置設置,需要的朋友可以參考下。
    2010-03-03
  • mysql?8.0.26?安裝配置方法圖文教程

    mysql?8.0.26?安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql?8.0.26?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論