成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:使用 MySQL 時,你們是怎樣做大表清理的?

數據庫 MySQL
大表清理是工作中經常遇到的情況,大表清理的方法有很多,可以根據自己實際的業務場景選擇合理的清理方式,無論選擇哪一種方案,都要注意一下三點: 1. 清理之前做好數據備份;2. 清理過程要評估是否對業務有影響,是否會中段業務;3. 確定好清理周期。

使用 MySQL 時,我們經常會遇到大表清理的情況。做大表清理的目的,一般是為了減表空間使用,提高表的操作性能。今天來聊一聊怎樣做大表清理。

一、SQL 清除

最直接的方式就是使用 delete 語句來刪除,可以使用主鍵:

delete from test1 where id in(...) order by id;

delete 語句存在的問題是 InnoDB 引擎只會把 SQL 中刪除的記錄標記為刪除,并不會回收磁盤空間,也就是說磁盤數據文件大小并不會減小。當然刪除的這條數據在磁盤文件中的位置是可以復用的,比如刪除一條 id 為 4 的記錄,就可以成功插入一條 id 為 4 的記錄。

delete 語句刪除還有一個缺點是會留下大量磁盤碎片,影響索引性能。


注意: 1.使用 delete 語句時可以使用 order by 對刪除條件進行排序,這樣可以保證刪除順序,避免全表掃描; 2.刪除之前要做備份。

二、邏輯刪除

既然使用 delete 語句做清理不能釋放表空間,那我們不如對數據做邏輯刪除。

//del_flag=1 表示邏輯刪除
update test1 set del_flag = '1' where id in(...);

這樣做的好處是并不會留下磁盤碎片,對索引性能沒有影響。但也存在缺點,那就是歸檔的時候需要對所有數據的刪除標識(del_flag)做判斷。

三、使用分區表

如果業務上沒有特殊要求,可以使用分區表,對分區直接做清理。比如以月為單位創建分區,對三個月以上的表做歸檔后直接把分區表 drop 掉。

ALTER TABLE test1 DROP PARTITION part202503;

分區表清理適合用于定期清理的場景,而且分區鍵必須要跟清理條件相符合,每月按周、按月、按季度,建表之前需要提前規劃好清理策略。

如果分區鍵需要按照業務屬性(比如身份證號)來定義,按照分區清理可能就不合適了。

四、使用臨時表

MySQL 官方文檔給的一種刪除方式是先把不刪除的數據備份到一張臨時表,然后再把原表改名,把臨時表改成原表名字,最后 drop 掉原表。

//1.備份數據到臨時表
INSERT INTO test1_copy SELECT * FROM test1 WHERE id in(...) ;
//2.把原表改名,把臨時表改名為原表名字
RENAME TABLE test1 TO test1_old, test1_copy TO test1_copy;
//3.刪除原表
DROP TABLE test1_old;

RENAME 語句可以防止其他會話再操作 test1 表,所以這個過程不會有并發問題。

但是在寫入頻率高的情況下,如果服務不中斷,并不能保證執行備份語句和 rename 語句之間沒有數據寫入。

五、重建表

為了避免上一節存在的問題,可以使用重建表的語句:

alter table test1 engine=InnoDB

在 MySQL 5.6 之后,支持 Online DDL,所以 SQL 執行過程中,test1 表依然可以進行增刪改操作,這些操作會記錄在日志文件中,重建表完成后,在新表上做重放,因此不用擔心丟失數據。Online DDL 重建表的流程如下:

1. 建立一個臨時文件,掃描 test1 表的所有記錄并生成 B+ 樹,存儲到臨時文件中;

2. 生成臨時文件的過程中,對 test1 的所有增刪改操作記錄到一個日志文件中;

3. 臨時文件生成后,將日志文件中的操作在臨時文件做重放,這樣臨時文件的數據跟 test1 數據文件中數據邏輯上相同;

4. 用臨時文件替換test1 表的數據文件。

六、使用歸檔工具

可以考慮使用歸檔工具比如 Percona Toolkit。

七、總結

大表清理是工作中經常遇到的情況,大表清理的方法有很多,可以根據自己實際的業務場景選擇合理的清理方式,無論選擇哪一種方案,都要注意一下三點:

1. 清理之前做好數據備份;

2. 清理過程要評估是否對業務有影響,是否會中段業務;

3. 確定好清理周期。

責任編輯:武曉燕 來源: 君哥聊技術
相關推薦

2021-04-30 20:25:20

Spring MVCJava代碼

2023-01-26 00:25:09

JVM設置技術

2021-04-12 21:34:29

Redis故障數據

2024-07-10 10:08:36

項目多表關聯哈希

2021-09-27 07:11:18

MySQLACID特性

2021-09-07 10:44:33

Java 注解開發

2024-02-22 09:19:52

2025-05-28 00:00:01

MySQL場景索引

2010-08-27 10:53:14

面試

2021-02-19 10:02:57

HTTPSJava安全

2024-02-04 10:08:34

2024-12-25 15:44:15

2024-02-22 15:36:23

Java內存模型線程

2021-12-08 06:53:29

面試動態代理

2022-09-29 07:30:57

數據庫索引字段

2024-05-11 15:11:44

系統軟件部署

2015-08-13 10:29:12

面試面試官

2024-07-31 08:18:40

2009-03-11 11:12:24

2022-07-15 08:22:42

對象符串鍵Symbol
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线一区二区三区 | 国产亚洲网站 | 精品国产一区久久 | 国产激情视频在线观看 | 一级黄色片网址 | 91国产精品 | www.久草.com| 中文字幕亚洲一区二区三区 | 国产精品国产成人国产三级 | 欧美精品久久久 | 天色综合网 | 亚洲精品久久久久久下一站 | 中文字幕亚洲一区二区三区 | 欧美美女被c | 完全免费在线视频 | 国产真实精品久久二三区 | 97国产精品视频人人做人人爱 | 国产精品视频一 | 久久久久久久一区二区 | av中文字幕在线观看 | 亚洲国产精品激情在线观看 | 久久久做 | 国产日韩一区二区三区 | 国产午夜精品理论片a大结局 | 久久久av | 国产精品三级久久久久久电影 | 中文日韩字幕 | 成年人网站在线观看视频 | 国产精品成人69xxx免费视频 | 日韩一区二区三区在线播放 | 中文字幕在线一区 | 中文字幕在线中文 | 99国产精品久久久 | 午夜男人天堂 | 美女日批免费视频 | 亚洲一区中文字幕在线观看 | 国产网站在线播放 | 日本成人在线免费视频 | 性色av一区二区三区 | 日本高清不卡视频 | 久久精品成人热国产成 |