MyISAMmysql
它不支持事務,也不支持外鍵,尤爲是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT爲主的應用基本均可以使用這個引擎來建立表。
每一個MyISAM在磁盤上存儲成3個文件,其中文件名和表名都相同,可是擴展名分別爲:sql
數據文件和索引文件能夠放置在不一樣的目錄,平均分配IO,獲取更快的速度。要指定數據文件和索引文件的路徑,須要在建立表的時候經過DATA DIRECTORY和INDEX DIRECTORY語句指定,文件路徑須要使用絕對路徑。
每一個MyISAM表都有一個標誌,服務器或myisamchk程序在檢查MyISAM數據表時會對這個標誌進行設置。MyISAM表還有一個標誌用來代表該數據表在上次使用後是否是被正常的關閉了。若是服務器覺得當機或崩潰,這個標誌能夠用來判斷數據表是否須要檢查和修復。若是想讓這種檢查自動進行,能夠在啓動服務器時使用--myisam-recover現象。這會讓服務器在每次打開一個MyISAM數據表是自動檢查數據表的標誌並進行必要的修復處理。MyISAM類型的表可能會損壞,可使用CHECK TABLE語句來檢查MyISAM表的健康,並用REPAIR TABLE語句修復一個損壞到MyISAM表。
MyISAM的表還支持3種不一樣的存儲格式:緩存
其中靜態表是默認的存儲格式。靜態表中的字段都是非變長字段,這樣每一個記錄都是固定長度的,這種存儲方式的優勢是存儲很是迅速,容易緩存,出現故障容易恢復;缺點是佔用的空間一般比動態表多。靜態表在數據存儲時會根據列定義的寬度定義補足空格,可是在訪問的時候並不會獲得這些空格,這些空格在返回給應用以前已經去掉。同時須要注意:在某些狀況下可能須要返回字段後的空格,而使用這種格式時後面到空格會被自動處理掉。
動態表包含變長字段,記錄不是固定長度的,這樣存儲的優勢是佔用空間較少,可是頻繁到更新刪除記錄會產生碎片,須要按期執行OPTIMIZE TABLE語句或myisamchk -r命令來改善性能,而且出現故障的時候恢復相對比較困難。
壓縮表由myisamchk工具建立,佔據很是小的空間,由於每條記錄都是被單獨壓縮的,因此只有很是小的訪問開支。 服務器
InnoDB併發
InnoDB是一個健壯的事務型存儲引擎,這種存儲引擎已經被不少互聯網公司使用,爲用戶操做很是大的數據存儲提供了一個強大的解決方案。個人電腦上安裝的MySQL 5.6.13版,InnoDB就是做爲默認的存儲引擎。InnoDB還引入了行級鎖定和外鍵約束,在如下場合下,使用InnoDB是最理想的選擇:工具
1.更新密集的表。InnoDB存儲引擎特別適合處理多重併發的更新請求。
2.事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
3.自動災難恢復。與其它存儲引擎不一樣,InnoDB表可以自動從災難中恢復。
4.外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。
5.支持自動增長列AUTO_INCREMENT屬性。性能
通常來講,若是須要事務支持,而且有較高的併發讀取頻率,InnoDB是不錯的選擇。spa
MEMORY索引
使用MySQL Memory存儲引擎的出發點是速度。爲獲得最快的響應時間,採用的邏輯存儲介質是系統內存。雖然在內存中存儲表數據確實會提供很高的性能,但當mysqld守護進程崩潰時,全部的Memory數據都會丟失。得到速度的同時也帶來了一些缺陷。它要求存儲在Memory數據表裏的數據使用的是長度不變的格式,這意味着不能使用BLOB和TEXT這樣的長度可變的數據類型,VARCHAR是一種長度可變的類型,但由於它在MySQL內部當作長度固定不變的CHAR類型,因此可使用。進程
通常在如下幾種狀況下使用Memory存儲引擎:
1.目標數據較小,並且被很是頻繁地訪問。在內存中存放數據,因此會形成內存的使用,能夠經過參數max_heap_table_size控制Memory表的大小,設置此參數,就能夠限制Memory表的最大大小。
2.若是數據是臨時的,並且要求必須當即可用,那麼就能夠存放在內存表中。
3.存儲在Memory表中的數據若是忽然丟失,不會對應用服務產生實質的負面影響。
Memory同時支持散列索引和B樹索引。B樹索引的優於散列索引的是,可使用部分查詢和通配查詢,也可使用<、>和>=等操做符方便數據挖掘。散列索引進行「相等比較」很是快,可是對「範圍比較」的速度就慢多了,所以散列索引值適合使用在=和<>的操做符中,不適合在<或>操做符中,也一樣不適合用在order by子句中。
注:通常的時候咱們都選擇InnoDB