Skip to content

MySQL 存储引擎对比

TIP

MySQL 支持多种存储引擎,最常用的是 InnoDB 和 MyISAM。了解它们的区别对表设计很重要。

InnoDB vs MyISAM

对比项InnoDBMyISAM
事务支持
行级锁
外键
全文索引✓(5.6+)
数据缓存✓(Buffer Pool)
表空间.ibd.MYD + .MYI
崩溃恢复✗(需 repair)
默认使用MySQL 5.5+ 默认MySQL 5.5 之前默认

存储结构

sql
-- InnoDB:一个表一个 ibd 文件
user.ibd   -- 包含数据和索引

-- MyISAM:三个文件
user.frm   -- 表结构
user.MYD   -- 数据文件
user.MYI   -- 索引文件

查看存储引擎

sql
-- 查看支持的引擎
SHOW ENGINES;

-- 查看表的引擎
SHOW CREATE TABLE user;
SHOW TABLE STATUS WHERE Name = 'user';

-- 创建时指定引擎
CREATE TABLE log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    message TEXT
) ENGINE=InnoDB;

-- 修改引擎
ALTER TABLE log ENGINE=MyISAM;

选择建议

sql
-- ✅ 使用 InnoDB 的场景
-- 大部分业务表:需要事务、外键、行级锁
CREATE TABLE `order` (
    id BIGINT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    amount DECIMAL(10,2),
    status TINYINT,
    created_at DATETIME,
    INDEX idx_user_id(user_id)
) ENGINE=InnoDB;

-- ✅ 使用 MyISAM 的场景
-- 只读表、日志表、数据仓库(MySQL 5.7 之前)
CREATE TABLE access_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    ip VARCHAR(15),
    url VARCHAR(255),
    visited_at DATETIME
) ENGINE=MyISAM;

TIP

MySQL 5.5 之后建议全部使用 InnoDB。如果对性能有极致要求,可以考虑使用其他 NoSQL 或分析型数据库。