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

8次阅读

InnoDB 是 MySQL 5.5+ 默认存储引擎,建表未指定 ENGINE 时由 default_storage_engine 配置决定;InnoDB 支持行级锁、ACID 事务、外键和崩溃自动恢复,MyISAM 仅支持表级锁、无事务、需手动修复,现代场景下优先选 InnoDB。

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

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

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

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

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

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

text=ZqhQzanResources