轉換表的引擎

2021-09-26 22:50:54 字數 1198 閱讀 2003

有很多種方法可以將表的儲存引擎轉換成另外一種引擎。

alter table

將表從乙個引擎修改為另乙個引擎最簡單的辦法是使用alter table語句。

例:將mytable的引擎修改為innodb:

mysql>altel table mytable engine=innodb;

上述語法可以適用任何儲存引擎。但有乙個問題:需要執行很長時間。mysql會按行將資料從原表複製到一張新的表中,在複製期間可能會消耗系統所有的i/o能力,同時原表上會加上讀鎖。所以,在繁忙的表上執行此操作要特別小心。乙個替代方案是採用接下來將討論的匯出與匯入的方法,手工進行表的複製。

如果轉換表的儲存引擎,將會失去和原引擎相關的所有特性。例如,如果將一張innodb表轉換為myisam,然後再轉換回innodb,原innodb表上的所有的外來鍵將丟失。

匯入與匯出

為了更好的控制轉換的過程,可以使用mysqldump工具將資料匯出到檔案,然後修改檔案中create table語句的儲存引擎選項,注意同時修改表名,因為同乙個資料庫中不能存在相同表名。即使他們使用的是不同的儲存引擎。同時要注意mysqldump缺省會自動在create table語句前加上drop table語句,不注意這一點可能會導致資料丟失。

建立與查詢(create select)

第三種轉換的技術綜合了第一種方法的高效和第二種方法的安全。不需要匯出整個表的資料,而是先建立乙個新的儲存引擎的表,然後利用insert…select語法來導資料;

mysql>create table innodb_table like myisam_table;

mysql>alter table innodb_table engine=innodb;

mysql>insert into innodb_table select * from myisam_table;

資料量不大的話,這樣做工作得很好。如果資料量大。則可以考慮做分批處理,針對每一段資料執行事務提交操作,以避免大事務產生過多的undo。假如有主鍵欄位id,重複執行以下語句(最大值y與最小值x進行相應的替換)將資料匯入到新錶:

mysql>start transaction;

mysql>insert into innodb_table select * from myisam_table;

->where id between x and y;

mysql>commit;

Mysql不同儲存引擎的表轉換方法

mysql不同儲存引擎的表轉換方法 1 alter table 直接修改表的儲存引擎,但是這樣會導致大量的系統開銷,mysql為此要執行乙個就表向新錶的逐行複製。在此期間,轉換操作可能會占用伺服器的所有i o處理能力。轉換表之後,原先引擎的特殊性質都會丟失,無法復原。2 轉儲和匯入方法 用提供的my...

mysql切換引擎 mysql轉換引擎的方法

有很多方法可以將表的儲存引擎轉換成另外一種引擎,每種方法都各有優缺點 a alter table 將表從乙個引擎直接改為另外乙個引擎最簡單的辦法 alter table tb name engine innodb 要注意 這種方法需要執行很長的時間,mysql會按行將資料從原表複製到另外一張新錶中,...

Mysql轉換表儲存引擎的三種方式

或許會有一些場景需要改變表的儲存引擎,例如儲存日誌的表如果幾乎只有insert和少量的select操作,為了追求更好的插入效能有可能會需要把儲存引擎更換為myisam。但是,本文不建議在同乙個資料庫中混合使用不同的儲存引擎。1.alter table 將表從乙個儲存引擎修改為另一種儲存引擎最簡單的方...