全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 8 分钟 ✍️ juanwangdev

MyISAM存储引擎

MyISAM是MySQL 5.5之前版本的默认存储引擎,不支持事务,采用表级锁。

存储结构

每个MyISAM表在磁盘上存储为三个文件:

文件扩展名说明
.frm表结构定义文件
.MYD数据文件(MYData)
.MYI索引文件(MYIndex)
SQL
表名.frm  → 表结构元数据
表名.MYD  → 实际数据记录
表名.MYI  → 索引数据

核心特性

1. 非事务型

SQL
-- MyISAM不支持事务,每条语句自动提交
CREATE TABLE t_myisam (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MyISAM;

-- 以下操作不会回滚
INSERT INTO t_myisam VALUES (1, 'test');
-- 即使后续失败,上面数据也已持久化

2. 表级锁

SQL
-- 读锁(共享锁)
LOCK TABLE t_myisam READ;
-- 只能读,不能写
UNLOCK TABLES;

-- 写锁(排他锁)
LOCK TABLE t_myisam WRITE;
-- 独占访问
UNLOCK TABLES;

3. 全文索引

SQL
CREATE TABLE articles (
    id INT PRIMARY KEY,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT INDEX ft_idx(title, content)
) ENGINE=MyISAM;

-- 全文检索
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('关键词');

4. 压缩表

text
-- 对只读表进行压缩,减少存储空间
-- 使用myisampack工具
-- myisampack 表名.MYD

索引结构

MyISAM采用非聚簇索引:

text
.MYI索引文件:
索引键 → 数据文件地址(.MYD中的偏移量)

.MYD数据文件:
按插入顺序存储记录

MyISAM的主键索引和辅助索引结构相同,都是非聚簇的,索引文件中存储数据文件地址。

适用场景

场景是否适合
读密集型✅ 适合
写密集型❌ 不适合(表锁)
需要事务❌ 不支持
全文检索✅ 支持(5.6前)
只读数据分析✅ 压缩表节省空间

与InnoDB对比

特性MyISAMInnoDB
事务
锁粒度表级锁行级锁
外键
聚簇索引
崩溃恢复❌ 差✅ 强
全文索引✅ 原生✅ 5.6+支持

MySQL 5.6之后InnoDB也支持全文索引,MyISAM的使用场景进一步缩小。

要点总结

  • MyISAM不支持事务,采用表级锁
  • 数据和索引分离存储:.MYD数据文件 + .MYI索引文件
  • 适合读多写少、不需要事务的场景
  • 现代MySQL应用首选InnoDB,MyISAM主要用于历史系统维护

📝 发现内容有误?点击此处直接编辑

← 上一篇 Memory存储引擎
下一篇 → MySQL架构与存储引擎概述
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库