MySQL最迷人的特點之一就是可以根據實際的需求不同選擇不同的存儲引擎。例如對于OLTP場景,要求快速響應,要求事務,要求一致性,都是短SQL,就可以選擇InnoDB引擎;對于Zabbix日志的存儲,就可以使用高壓縮比,插入速度塊的tokuDB存儲引擎;需要橫向擴展的需求,可以考慮使用Spider存儲引擎。
這一點是其他數據庫無法比擬的。我們可以用下面的命令檢查現在安裝好的MySQL都支持那些引擎:
```bash
show engines;
```

官方的MySQL5.7.22版本,支持9種存儲引擎,其中InnoDB是默認存儲引擎。這里也可以看到對每種引擎的簡單特點描述。下面介紹一下比較重要的兩種引擎:
* InnoDB:默認存儲引擎,支持事務,支持行級鎖。采用Oracle風格的一致性非鎖定讀去增加并發性能,采用索引組織表。
* MyISAM:最初的MySQL默認存儲引擎,表級鎖,不支持事務,不適合做OLTP業務,對于倉庫類業務比較適合。
另外之前的章節中還提到了XtraDB,這是InnoDB的性能增強版。
Percona公司還有tokuDB引擎,該引擎采用分型樹組織表,其寫入效率遠高于InnoDB,且具有超高的壓縮比,非常適合存儲zabbix之類監控的日志數據。
Facebook根據Google的levelDB論文開發了MyRocks引擎,該引擎的目的是最終取代InnoDB,有興趣可以參考levelDB的相關資料,學習其思想。
只要是能在剛才的命令中查出來的引擎,就可以在建表時指定使用:
```sql
-- ENGINE=INNODB not needed unless you have set a different
-- default storage engine.
CREATE TABLE t1 (i INT) ENGINE = INNODB;
-- Simple table definitions can be switched from one to another.
CREATE TABLE t2 (i INT) ENGINE = CSV;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;
```
也可以對已經存在的表更改引擎:
```sql
ALTER TABLE t ENGINE = InnoDB;
```