MySql體系
先來看一下MySql的架構圖:mysql

MySql的存儲引擎在架構的最下層,提供了各式各樣的存儲特性,下面介紹幾個經常使用的存儲引擎。sql
MyISAM
官方提供的一個存儲引擎,在數據庫的系統表和系統生成的臨時表,有時會用到該存儲引擎。數據庫
存儲方式
- table.MYD:數據文件;
- table.MYI:索引文件;
- table.frm:結構文件;
特性
- 表級鎖,查詢時使用共享鎖,修改時使用獨佔鎖;
- 修復時,使用check table xxx 和 repair table xxx;
- 索引,在5.7以前爲數很少的支持全文索引(Text和Blob前500個字符)和空間函數的存儲引擎;
- 支持壓縮,使用mysiampack壓縮,會產生一個xxx.OLD文件,壓縮後表爲只讀模式;
限制
mysql5.0以前,單表大小默認不能超過4G,能夠用max_rows和avg_row_length修改。5.0之後的版本單表支持256TB。緩存
使用場景
- 非事務OLAP應用,由於MYISAM不支持事務;
- 只讀應用,由於壓縮後是隻讀模式,可是會節約磁盤空間;
- 空間應用,5.7前惟一支持空間函數的存儲引擎;
InnoDB
數據
結構仍是存儲在.frm文件中,但innoDB有本身的表空間,以.idb結尾,也可使用系統表空間,可是不方便進行文件收縮,並且使用系統表空間,在多表操做時會有I/O瓶頸。服務器
特性
支持事務,由redo log和undo log實現,redo log提供了內存緩衝區和內存日子文件,以順序寫的方式執行提交的事務,undo log提供了回滾與MVCC功能架構
支持行級鎖,寫操做時的鎖定範圍更少,提升了併發能力。併發
innodb還提供了狀態檢查,使用 show engine innodo status 查看最近N秒的服務器狀態。函數
使用場景
- 使用大多的OLTP應用;
- 5.7後也有了全文索引和空間函數;
- 是很是經常使用的一種存儲引擎,也是mysql如今默認的存儲引擎了;
CSV
數據
以.csv文件存儲數據,.csm文件存儲表狀態,.frm存儲結構;spa
特性
- 全部列不能爲空;
- 不支持索引;
- 可直接編輯文件內容,內容以「aa」,"bb"格式存儲在.csv文件中;
場景
能夠用於數據交換,看成中間表使用。日誌
Archive
數據
- 以zlib存儲數據,會對數據進行壓縮,比例很高;
- 以.ARZ文件存儲;
特色
- 只支持insert和select;
- 能夠在自增列上建立索引;
場景
Memary
數據
也叫HEAP,數據保存在內存中,文件只有一個.frm文件,保存結構。
特色
- 支持HASH和BTree索引,Hash用做等值,BTree用做範圍;
- 全部字段都是固定長度的;
- 不支持BLOG和TEXT;
- 使用了表級鎖;
- 表大小由max_heap_table_size決定;
場景