2021-01-19:mysql中,一張表裏有3億數據,未分表,其中一個字段是企業類型,企業類型是通常企業和個體戶,個體戶的數據量差很少佔50%,根據條件把個體戶的行都刪掉。請問如何操做?

2021-01-19:mysql中,一張表裏有3億數據,未分表,其中一個字段是企業類型,企業類型是通常企業和個體戶,個體戶的數據量差很少佔50%,根據條件把個體戶的行都刪掉。請問如何操做?
福哥答案2021-01-09:html

面試的時候,說的是分批刪除,沒讓面試官滿意。mysql

網上答案:1:
MYSQL數據庫因生產緣由須要刪除大量數據,因數據量太大接近上億條,用常規delete刪除小數據能夠,刪除幾千萬大數據量會很是慢,而且不會釋放出磁盤空間,還須要optimize或repair來壓縮數據表來釋放硬盤空間,時間更長,須要幾天時間,太慢了!所以採用新建表,導入無需刪除的數據,而後刪除老表,把新表更名爲老表,步驟以下:面試

一、基於老表新建新表!
create table sell_new like sell;sql

二、插入數據(幾千萬的數據量必定要分批插入,一次50萬爲最佳,畢竟mysql的數據處理能力有限),能夠按ID查詢後插入!
insert into sell_new select * from sell where itemid>500000 and itemid<=5500000;數據庫

新表中只保留有用的數據,硬盤空間得以釋放!大數據

三、drop刪除掉老表
drop table sell;url

四、重命名新表爲「sell」
alter table sell_new rename to sell;.net

以上是mysql數據庫上億級大數據如何快速刪除操做流程!日誌

網上答案2:
假設表的引擎是 Innodb, MySQL 5.7+。htm

刪除一條記錄,首先鎖住這條記錄,數據原有的被廢棄,記錄頭髮生變化,主要是打上了刪除標記。也就是原有的數據 deleted_flag 變成 1,表明數據被刪除。可是數據沒有被清空,在新一行數據大小小於這一行的時候,可能會佔用這一行。這樣其實就是存儲碎片。

以後,相關數據的索引須要更新,清除這些數據。而且,會產生對應的 binlog 與 redolog 日誌。
若是 delete 的數據是大量的數據,則會:

1.若是不加 limit 則會因爲須要更新大量數據,從而索引失效變成全掃描致使鎖表,同時因爲修改大量的索引,產生大量的日誌,致使這個更新會有很長時間,鎖表鎖很長時間,期間這個表沒法處理線上業務。
2.因爲產生了大量 binlog 致使主從同步壓力變大。
3.因爲標記刪除產生了大量的存儲碎片。因爲 MySQL 是按頁加載數據,這些存儲碎片不只大量增長了隨機讀取的次數,而且讓頁命中率下降,致使頁交換增多。
4.因爲產生了大量日誌,咱們能夠看到這張表的佔用空間大大增高。
解決方案
咱們很容易想到,在 delete 後加上 limit 限制控制其數量,這個數量讓他會走索引,從而不會鎖整個表。

可是,存儲碎片,主從同步,佔用空間的問題並無解決。能夠在刪除完成後,經過以下語句,重建表:

alter table 你的表 engine=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;

注意這句話其實就是重建你的表,雖然你的表的引擎已是 innodb 了,加上後面的, ALGORITHM=INPLACE, LOCK=NONE 能夠不用鎖表就重建表。

還有一種方案是,新建一張一樣結構的表,在原有表上加上觸發器:
create trigger person_trigger_update AFTER UPDATE on 原有表 for each row
begin set @x = 「trigger UPDATE」;
Replace into 新表 SELECT * from 原有表 where 新表.id = 原有表.id;
END IF;
end;

這樣能夠保證線上業務有新數據會同步。以後,將全部企業類型的數據,插入新表,同時若是已存在則證實發生了更新同步就不插入。個體戶數據因爲業務變化,並不在這個表上更新,因此這樣經過了無表鎖同步實現了大表的數據清理。

網上答案3:
刪除達標上的多行數據時,innodb會超出lock table size的限制,最小化的減小鎖表的時間的方案是:
1選擇不須要刪除的數據,並把它們存在一張相同結構的空表裏 。
2重命名原始表,並給新表命名爲原始表的原始表名 。
3刪掉原始表 。
總結一下就是,當時刪除大表的一部分數據時可使用 見新表,拷貝數據,刪除舊錶,重命名的方法。


mysql數據庫上億級大數據如何快速刪除
每日一面 - mysql 大表批量刪除大量數據
mysql刪除超大數據
Mysql刪除大量數據幾種方案
MySQL刪除大量數據幾種方案(續)
評論

相關文章
相關標籤/搜索