加快alter table 操作速度

2021-06-22 06:08:19 字數 704 閱讀 2114

理論上, mysql可以跳過建立新錶的 步驟. 列的預設值實際上存在表的.frm檔案中,所以可以直接修改這個檔案而不需要改動表本身。

然而mysql還沒有採用這種優化的方法,所有的modify column操作都將導致表重建.

這就是為什麼上圖直接使用modify column 有那麼多行受影響和需要那麼久時間的原因.

而alter column column_name set type 這個語句會直接修改.frm檔案而不涉及表的資料. 所以,這個操作是非常快的

修改.frm檔案

下面這些操作是有可能不需要重建的

基本的理念是為想要的表結構建立乙個新的.frm檔案,然後用它替換掉已經存在的那張表的.frm檔案

建立一張有相同結構的空表,並進行所需要的修改(例如增加enum常量).

執行flush tables with read lock。這將會關閉所有正在使用的表,並且禁止任何表被開啟

交換.frm檔案

執行unlock tables來釋放第2步的讀鎖

最後需要做的是刪除為完成這個操作而建立的輔助表

Android Studio配置,加快編譯速度

在project 的gradle.properties中新增 org.gradle daemon true org.gradle parallel true org.gradle jvmargs xmx1024m如果記憶體足夠大,可以這樣 org.gradle jvmargs xmx4096m xx...

MySQL 常見ALTER TABLE 操作

修改表的儲存引擎 show table status like tb 001 g alter table tb 001 type myisam 檢視表中列屬性 show columns from tb 001 修改表名 rename table tb 001 to tb 002 增加主鍵 alter...

mysql 常見ALTER TABLE操作

刪除列 alter table table name drop col name 增加列 單列 alter table table name add col name col type comment 增加列 多列 alter table table name add col name col ty...