在MySQL中用的較多的兩種引擎是MyISAM引擎和INNODB引擎,下面主要圍繞這兩種引擎展開說明:mysql
索引方式 | 默認引擎版本 | 簡述 | |
---|---|---|---|
MyISAM引擎 | 非彙集索引方式 | 5.5版本以前 | 性能極佳,但卻不支持事務處理(transaction) |
INNODB引擎 | 彙集索引方式 | 5.5版本 | 和MyISAM相比,它支持ACID兼容的事務 |
注意:執行引擎的操做對象是表而不是數據庫!sql
注:此處以windos本地服務器爲例:數據庫
①咱們先在服務器上用mysql創建一個數據庫:咱們能夠先在服務器上的存儲位置上找到名爲data的文件夾,這裏存儲的是數據庫和一些其餘文件。每個文件夾分別表明一個數據庫服務器
②下面咱們創建一個名字叫作xuzhijieDB的數據庫:性能
mysql> CREATE DATABASE xuzhijieDB; -- ------返回結果:Query OK, 1 row affected (0.00 sec)
③雙擊進入這個數據庫,發現裏面是有個db.opt文件夾,這是由於咱們未在數據庫中創建任何東西,下面的操做關係到引擎的概念:spa
咱們先創建一個以Innodb爲存儲引擎的表:code
mysql> use xuzhijieDB; -- ---返回:Database changed -- 先選擇須要操做的數據庫
mysql> CREATE TABLE xuzhijieTest ( country varchar(255) NOT NULL, address varchar(255) NOT NULL, name varchar(255) NOT NULL, TELE varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------返回結果Query OK, 0 rows affected (0.04 sec) -- 注意建立表後的ENGINE=InnoDB更加說明引擎是操做表的而不是操做數據庫的!
④打開local_test這個文件咱們會發現多出了幾個文件:對象
⑤咱們在使用MyISAM引擎創建一個表,仍是觀察xuzhijiedb的文件變化:索引
mysql> CREATE TABLE xuzhijieTest2 ( country varchar(255) NOT NULL, address varchar(255) NOT NULL, name varchar(255) NOT NULL, TELE varchar(255) NOT NULL) ENGINE=MyiSAM DEFAULT CHARSET=utf8; -- --------返回結果:Query OK, 0 rows affected (0.01 sec)
結果:咱們發現數據庫使用不一樣引擎產生的文件類型和個數是不同的。下面對具體的文件進行說明:圖片
咱們上面的例子中兩個數據表的字段均是一致的,也就是說兩個數據表xuzhijietest和xuzhijietest2的結構是同樣的。
FRM文件時用來存儲數據表的結構的,下圖之因此FRM文件大小一直是由於這兩個表的結構一致。
實時上,FRM指的就是③還和⑤中的數據表建立語句,並用二進制代碼儲存(感興趣能夠用sublime打開看看,反正你也看不懂)
咱們觀察MyiSAM引擎產生的一個文件:MYD文件,它是0kb的,這是由於MYD是MyiSAM用來存儲數據的,而上述操做咱們只是涉及到表的創建,而並無給數據表加入數據,因此MYD的大小爲0。
下面咱們添加數據表中的信息,則因爲MYD是存儲數據的,這樣它的大小將變成數據大小而不是0。
咱們能夠發現IBD文件在這些文件中是最大的,由於它是將數據和索引一塊兒存儲的,因此文件較大。
MyiSAM的查詢性能因爲Innodb
事實上,Innodb的ibd文件大,這就意味着查找的時間就會越久,查找會慢這也是爲何MyiSAM的查找性能大於innodb的緣由。
MyiSAM不支持事務,Innodb支持事務
索引和數據放於兩個文件給MyiSAM帶來了查詢速度的快捷,同時這也致使MyiSAM不支持事務,這是因爲索引和數據放於兩個文件會它們很難達到一致性。
最後咱們獲得下表的結論: