1. 程式人生 > >MySQL中MyISAM與InnoDB區別、選擇及轉換

MySQL中MyISAM與InnoDB區別、選擇及轉換

區別:

InnoDB:
支援事務處理等
不加鎖讀取
支援外來鍵
支援行鎖
支援全文搜尋(5.5以後版本)
不支援FULLTEXT型別的索引
不儲存表的具體行數,掃描表來計算有多少行
DELETE 表時,是一行一行的刪除
InnoDB 把資料和索引存放在表空間裡面
跨平臺可直接拷貝使用
InnoDB中必須包含AUTO_INCREMENT型別欄位的索引
表格很難被壓縮

MyISAM:
不支援事務,回滾將造成不完全回滾,不具有原子性
不支援外來鍵
支援全文搜尋
儲存表的具體行數,不帶where時,直接返回儲存的行數
DELETE 表時,先drop表,然後重建表
MyISAM 表被存放在三個檔案 。frm 檔案存放表格定義。 資料檔案是MYD (MYData) 。 索引檔案是MYI (MYIndex)引伸
跨平臺很難直接拷貝
MyISAM中可以使AUTO_INCREMENT型別欄位建立聯合索引
表格可以被壓縮

選擇:
因為MyISAM相對簡單所以在效率上要優於InnoDB.如果系統讀多,寫少。對原子性要求低。那麼MyISAM最好的選擇。且MyISAM恢復速度快。可直接用備份覆蓋恢復。
如果系統讀少,寫多的時候,尤其是併發寫入高的時候。InnoDB就是首選了。
兩種型別都有自己優缺點,選擇那個完全要看自己的實際類弄。
 

轉換:

1)修改my.cnf配置檔案
# vim my.cnf
[mysqld] //在這個配置區域新增下面一行,指定儲存引擎為innodb
default-storage-engine = InnoDB

2)轉換表的命令:
mysql> alter table 表名 engine=innodb;

3)檢視儲存引擎型別
mysql> show variables like '%storage_engine%';
+----------------+--------+
| Variable_name  | Value  |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+