我們怎么選擇合適的引擎?這里簡單歸納一句話:“除非需要用到某些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的工具,可以簡單,方便的執行避免手工操作導致的失誤。