在 MySQL 5.5 之前,默认存储引擎为 MyISAM,之后版本的默认存储引擎为 InnoDB。

选择一个合适的存储引擎至关重要。

存储引擎

根据是否支持事务,MySQL 的存储引擎可以分为:

  1. 事务型;
  2. 非事务型;

表 1 为 MySQL 支持的所有存储引擎以及各存储引擎的基本介绍。

表 1 不同的存储引擎

存储引擎 支持事务 特点 适用场景
InnoDB 1. 支持行锁、灾难恢复、多版本并发控制;
2. 支持外键、字段约束;
1. 适用于绝大部分场景;
MyISAM 1. 读写速度快;
2. 支持表锁;
3. 支持 B 树索引、聚簇索引、全文搜索索引;
4. 支持地理数据及其索引;
5. 不支持哈希索引、外键、多版本并发控制;
6. 存储限制为 256TB;
1. 读写频繁的应用;
2. 数据仓库;
Memory 1. 内存数据库;
2. 相较于 MyISAM,读写速度更快;
3. 支持表锁;
4. 非持久化数据;
5. 不支持多版本并发控制;
1. 快存快取
CSV 1. 通用格式,易于集成;
2. 不支持索引;
3. 不支持分区;
4. 表的所有字段都要设置 not null
/
Merge 1. 底层使用 MyISAM 存储引擎;
1. 数据仓库
Archive 1. 插入数据后,数据会被压缩; 1. 存储历史数据;
Federated 1. 集群式管理 MySQL 实例;
1. 分布式环境;
Blackhole 1. 可以向表插入数据,但查询只会返回空结果;
2. 支持所有的索引类型;
3. 不支持分区;
/
Example 啥也不是存储引擎 /

设置方法

以 InnoDB 为例,可通过以下 3 种方法设置表的存储引擎:

  1. my.cnf 配置项;
  2. SET STORAGE_ENGINE;
  3. 创建表时;

my.cnf 配置项

在 my.cnf 文件或其它引入的配置中,修改 [mysqld] 中的 default-storage-engine 的值,如:

[mysqld]
default-storage-engine = InnoDB

SET STORAGE_ENGINE

在执行脚本文件前,先通过 SET 设置使用的存储引擎:

SET STORAGE_ENGINE = InnoDB;

创建表时

在创建数据库表时,指定 ENGINE

CREATE TABLE IF NOT EXISTS test_name (
  id int
) ENGINE = InnoDB;

总结

  1. MySQL 支持多种不同的存储引擎,InnoDB 存储引擎适用于绝大多数场景,并且支持事务、多版本并发控制;
  2. 可以在 3 个层次上对存储引擎进行修改,即:
    1. 服务器层,my.cnf 配置项;
    2. 会话层,在当前会话中使用 SET 设置存储引擎;
    3. 脚本层,在创建或修改表时声明存储引擎;

参考

  1. MySQL storage engines
  2. 官方文档 Alternative Storage Engines