MySQL選擇合適的引擎及引擎轉換的詳解

我們怎么選擇合適的引擎?這里簡單歸納一句話:“除非需要用到某些innodb不具備的特性,并且沒有其他辦法可以替代,否則都應該優先選擇innodb引擎。

? ?除非萬不得已,否則不建議混合使用多種存儲引擎,否則可能帶來一系列復雜的問題以及一些潛在的BUG。

使用不同引擎考慮的幾大因素:

? ?1.事務

? ? ? ? ? ?如果需要事務支持,那么InnoDB或者XtraDB目前最穩定。如果不需要事務且主要是SELECT和INSERT操作,MyISAM是不錯的選擇。

? ?2.備份

? ?? ? ? ?如果需要在線熱備份,InnoDB是基本的選擇。

? ?3.崩潰恢復

? ? ? ? ? 數據量比較大的時候,系統崩潰后如何快速恢復是一個需要考慮的問題,這也是許多人即使不需要事務支持也選擇InnoDB的原因。

?

?轉換表的引擎:

? ?1.ALTER TABLE

? ? ? ?最簡單的方法就是ALTER TABLE語句: ? ?mysql> ALTER TABLE mytable ENGINE = InnoDB;

? ? ? ?這個語法適用于任何存儲引擎,但是需要執行很長的時間。

??轉換表的存儲引擎,將會失去和原引擎相關的所有特性。

? ?2.導出與導入

? ? ? ?可以使用mysqldump工具將數據導出到文件,然后修改文件中CREATE TABLE語句的存儲引擎,請注意修改表名。

? ? ? ?同時請注意mysqldump工具默認會自動在CREATE TABLE語句前加上DROP TABLE語句,小心數據丟失。

? ?3.創建與查詢

? ? ? ?綜合第一種與第二種,先創建一個新的存儲引擎表,然后利用INSTER … SELECT語法來導數據

?mysql>?CREATE?TABLE?innodb_table?LIKE?myisam_table;  ???????mysql>ALTER?TABLE?innodb_table?ENGINE=InnoDB;  ???????mysql>INSTER?INTO?innodb_table?SELECT?*?FROM?myisam_table;

? ? ? ?數據量大的話可以分批處理,針對每一段數據執行事務提交操作,避免大事務產生的undo。Percona Toolkit提供了一個pt-online-schema-change的工具,可以簡單,方便的執行避免手工操作導致的失誤。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享