mysql安装时选择存储引擎InnoDB与MyISAM的区别

来源:这里教程网 时间:2026-02-28 20:38:10 作者:

InnoDB 和 MyISAM 在 MySQL 安装时其实不选

MySQL 安装过程本身并不让你选择默认存储引擎;

innodb
自 5.5 版本起就是编译内置且默认启用的引擎,安装包不会提供「切换默认引擎」的选项。真正需要你干预的,是建表时的
ENGINE=
显式声明,或通过配置项
default_storage_engine
修改全局默认值。

建表时不指定 ENGINE 时用的是哪个

取决于当前 MySQL 实例的

default_storage_engine
配置,可通过以下命令确认:

SELECT @@default_storage_engine;

常见情况:

MySQL 5.5 及以后版本:默认为
innodb
(即使你没改过配置)
某些老旧发行版(如早期 MariaDB 或定制包)可能仍设为
myisam
,需检查
如果建表语句写了
ENGINE=MyISAM
,那不管默认值是什么,这张表一定用 MyISAM

事务、锁与崩溃恢复能力差异

这是两者最根本的分水岭,直接影响数据安全和并发行为:

InnoDB
支持行级锁、ACID 事务、外键约束、崩溃后自动恢复(靠
redo log
undo log
MyISAM
只支持表级锁,无事务,不支持外键,崩溃后需手动运行
myisamchk
修复,且可能丢数据
高并发写场景下,
MyISAM
的表锁会导致大量阻塞;
InnoDB
的行锁在多数 OLTP 场景更可靠
InnoDB
占用更多内存(缓冲池
innodb_buffer_pool_size
)、磁盘空间(聚簇索引 + 事务日志),但换来的是可靠性

查询性能与适用场景怎么选

别迷信「MyISAM 更快」这种过时说法——现代硬件和优化下,多数场景

InnoDB
综合表现更好:

读多写少 + 全表扫描多 + 不需要事务?
MyISAM
COUNT(*)
确实快(它缓存了行数),但这个优势在有
WHERE
条件时消失
TEXT
/
BLOB
字段?
InnoDB
5.7+ 已支持全文索引,
MyISAM
的全文索引不支持事务一致性
需要
GIS
功能?MySQL 5.7+ 的空间函数只对
InnoDB
表生效
备份策略依赖
mysqldump
InnoDB
支持
--single-transaction
实现热备;
MyISAM
只能加锁或停写

除非你维护一个只读静态报表库,且明确要求极低内存占用、允许偶尔损坏,否则现在几乎没有理由主动选

MyISAM

相关推荐