mysql中常见的存储引擎及其特点

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

怎么查当前 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
)、静态报表表、历史归档中间表、或极老系统迁移过渡期。它的表级锁和无事务是硬伤。

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 拒绝服务 InnoDB 的行锁不是银弹,
UPDATE ... WHERE non_indexed_column = ?
会退化成表锁;MyISAM 的全文索引在 MySQL 5.6+ 已被 InnoDB 原生支持;而 Memory 引擎的哈希索引只加速等值查询,
LIKE '%abc'
或范围查询照样慢。选引擎不是看“支持什么”,而是看“不能容忍什么”。

相关推荐