MySQL最迷人的特点之一就是可以根据实际的需求不同选择不同的存储引擎。例如对于OLTP场景,要求快速响应,要求事务,要求一致性,都是短SQL,就可以选择InnoDB引擎;对于Zabbix日志的存储,就可以使用高压缩比,插入速度块的tokuDB存储引擎;需要横向扩展的需求,可以考虑使用Spider存储引擎。
这一点是其他数据库无法比拟的。我们可以用下面的命令检查现在安装好的MySQL都支持那些引擎:
```bash
show engines;
```
![](https://box.kancloud.cn/540f720e9251cff66354d75fd8f2a1fb_1066x241.png)
官方的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;
```