MySQL默认且最常用InnoDB引擎,因其具备事务、行锁、外键、崩溃恢复和MVCC等强容错能力;MyISAM适用于全文检索、静态报表等特定场景,但无事务、表级锁且易损坏;Memory引擎仅用于临时数据,重启即失,不支持持久化。

怎么查当前 MySQL 支持哪些存储引擎
直接连上 MySQL,执行:
SHOW ENGINES\G;就能看到所有可用引擎及其
SUPPORT 状态(YES、DEFAULT、NO 或 DISABLED)。注意:有些引擎(比如 FEDERATED、EXAMPLE)默认是禁用的,需在配置文件中显式启用并重启服务,否则即使出现在列表里也用不了。
InnoDB 为什么是默认且最常选的引擎
它不是“性能最好”的,而是“综合容错能力最强”的——事务、行锁、外键、崩溃恢复、MVCC 全都拉满。但代价也很实在:INSERT 比 MyISAM 慢,.ibd 文件体积更大,写操作要刷 redo log,对 SSD 耐久性也有轻微影响。
- 建表时不指定
ENGINE=,就自动用 InnoDB(MySQL 5.5+ / MariaDB 10.2+) - 如果业务涉及订单、账户、库存等强一致性场景,别犹豫,就选它
- 误删了
innodb_file_per_table=OFF下的表?恢复难度陡增——因为所有表数据混在ibdata1里,没法单独导出
MyISAM 还值得用吗?什么情况下会踩坑
它没死,但只活在特定角落:全文检索(FULLTEXT)、静态报表表、历史归档中间表、或极老系统迁移过渡期。它的表级锁和无事务是硬伤。
本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。 本书是第4版,经过了全面的更新、重写和扩展,包括PHP5.3最新改进的特性(例如,更好的错误和异常处理),MySQL的存储过程和存储引擎,Ajax技术与Web2.0以及Web应用需要注意的安全
-
SELECT COUNT(*) FROM huge_table在 MyISAM 上秒出,InnoDB 却要扫索引——因为 MyISAM 自带行数缓存;但这数字在并发写入时不准 - 突然断电?MyISAM 表大概率损坏,得靠
REPAIR TABLE,而 InnoDB 能自动前滚/回滚 - 想加外键?不行。想做热备份?
mysqldump是唯一稳妥方式,xtrabackup不支持它
Memory 引擎真快,但快得不牢靠
它把整张表塞进内存,SELECT 和 WHERE id = ? 极快,但一旦 MySQL 服务重启、OOM kill 或执行 DROP TABLE,数据全丢——它不是缓存方案,是临时表方案。
- 适合做 JOIN 中间结果集、会话 ID 映射表、或复杂查询的物化临时表(
CREATE TEMPORARY TABLE ... ENGINE=MEMORY) - 不支持
TEXT/BLOB类型,最大容量受max_heap_table_size限制,默认才 16MB - 别把它当 Redis 用——没有过期机制,也没有淘汰策略,撑爆内存会导致整个 MySQL 拒绝服务
UPDATE ... WHERE non_indexed_column = ? 会退化成表锁;MyISAM 的全文索引在 MySQL 5.6+ 已被 InnoDB 原生支持;而 Memory 引擎的哈希索引只加速等值查询,LIKE '%abc' 或范围查询照样慢。选引擎不是看“支持什么”,而是看“不能容忍什么”。









