数据库引擎,更准确地说是存储引擎,是 MySQL 中真正负责数据“怎么存、怎么取、怎么改、怎么锁、怎么保证安全”的底层模块。它不是数据库的外围工具,而是直接和磁盘文件(或内存)打交道的核心子系统。
存储引擎是表级的,不是库级的
MySQL 允许你为每一张表单独指定存储引擎。比如:一个库里的用户表用 InnoDB(要事务),日志表用 MyISAM(只读查询多),临时汇总表用 MEMORY(纯内存、快但重启丢数据)。这种灵活性是 MySQL 区别于 Oracle、SQL Server 等单引擎数据库的关键优势。
常见存储引擎的核心差异
不同引擎在关键能力上差别明显,选错会影响功能和性能:
InnoDB:MySQL 5.5 之后默认引擎。支持事务(ACID)、行级锁、外键、崩溃恢复。适合高并发、读写混合、要求数据一致性的业务场景。 MyISAM:不支持事务和行锁,只有表级锁;但对纯读操作(如报表、归档查询)有更高吞吐。自带全文索引(5.6+),物理上分 .frm(结构)、.MYD(数据)、.MYI(索引)三个文件。 MEMORY:所有数据驻留内存,速度极快,但服务重启即清空,且不支持 BLOB/TEXT 类型。适合缓存表、中间计算结果等临时性需求。 Archive:专为归档设计,只支持 INSERT 和 SELECT,自动压缩,节省空间。常用于历史日志、审计记录等冷数据存储。怎么查看和切换存储引擎
你可以随时检查和调整,无需重建整个数据库:
查当前支持哪些引擎:SHOW ENGINES;(Support 列为 DEFAULT 表示当前默认) 查默认引擎:
SELECT @@default_storage_engine;建表时指定:
CREATE TABLE t1 (...) ENGINE = MyISAM;修改已有表:
ALTER TABLE t1 ENGINE = InnoDB;全局修改默认值:在 my.cnf 中配置
default-storage-engine=InnoDB,重启生效。
为什么引擎选择不能“一招鲜”
因为不同业务诉求冲突明显:
要事务完整性?MyISAM 不行,必须选 InnoDB 或 NDB。 要极致查询速度但能接受无事务?MyISAM 或 MEMORY 更合适。 数据量极大、写入频繁、又需快速检索?WiredTiger(MongoDB)、RocksDB(MyRocks)这类 LSM 树引擎可能比传统 B+ 树更优。 敏感数据上云?加密存储引擎可透明加解密,避免应用层改造。