MySQL有多種存儲引擎,MyISAM和InnoDB是其中經常使用的兩種。這裏介紹關於這兩種引擎的一些基本概念(非深刻介紹)。mysql
MyISAM是MySQL的默認存儲引擎,基於傳統的ISAM類型,支持全文搜索,但不是事務安全的,並且不支持外鍵。每張MyISAM表存放在三個文件中:frm 文件存放表格定義;數據文件是MYD (MYData);索引文件是MYI (MYIndex)。sql
InnoDB是事務型引擎,支持回滾、崩潰恢復能力、多版本併發控制、ACID事務,支持行級鎖定(InnoDB表的行鎖不是絕對的,若是在執行一個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表,如like操做時的SQL語句),以及提供與Oracle類型一致的不加鎖讀取方式。InnoDB存儲它的表和索引在一個表空間中,表空間能夠包含數個文件。數據庫
主要區別:安全
MyISAM是非事務安全型的,而InnoDB是事務安全型的。 MyISAM鎖的粒度是表級,而InnoDB支持行級鎖定。 MyISAM支持全文類型索引,而InnoDB不支持全文索引。 MyISAM相對簡單,因此在效率上要優於InnoDB,小型應用能夠考慮使用MyISAM。 MyISAM表是保存成文件的形式,在跨平臺的數據轉移中使用MyISAM存儲會省去很多的麻煩。 InnoDB表比MyISAM表更安全,能夠在保證數據不會丟失的狀況下,切換非事務表到事務表(alter table tablename type=innodb)。 應用場景:併發
MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。若是應用中須要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。 InnoDB用於事務處理應用程序,具備衆多特性,包括ACID事務支持。若是應用中須要執行大量的INSERT或UPDATE操做,則應該使用InnoDB,這樣能夠提升多用戶併發操做的性能。 經常使用命令:性能
(1)查看錶的存儲類型(三種):命令行
show create table tablename show table status from dbname where name=tablename mysqlshow -u user -p password --status dbname tablename索引
(2)修改表的存儲引擎:事務
alter table tablename type=InnoDBinnodb
(3)啓動mysql數據庫的命令行中添加如下參數使新發布的表都默認使用事務:
--default-table-type=InnoDB
(4)臨時改變默認表類型:
set table_type=InnoDB show variables like 'table_type'