Mariadb (MySQL) 存储引擎的对比
MyISAM:
- 不支持事务处理
- 表级锁定,可能导致写操作阻塞读操作
- 支持全文索引
- 快速的计数操作(SELECT COUNT(*))
- 数据和索引分开存储,索引文件压缩,可提高查询性能
- 更适合读密集型应用
InnoDB:
- 支持事务处理和 ACID 兼容
- 行级锁定,减少读写冲突,适合并发写操作
- 支持外键约束
- 不支持全文索引(在 MySQL 5.6 之前)
- 通过主键快速访问数据,更适合写密集型应用
- 数据和索引紧密绑定,表通常比 MyISAM 大
InnoDB 更适合高事务性或并发写入。MyISAM 更适合单纯查询操作。
对比表格
特点 | MyISAM | InnoDB |
---|---|---|
存储结构 | 分成三个文件:.frm(表定义)、.MYD(数据)、.MYI(索引) | 表空间数据文件和日志文件 |
事务支持 | 不支持 | 支持 |
外键支持 | 不支持 | 支持 |
默认存储引擎 | MySQL 5.1 之前 | MySQL 5.1 之后 |
全文索引 | 支持 | 不支持 |
表行数计算 | 简单读取保存好的行数 | 需要扫描整个表来计算行数 |
自增长字段 | 可以与其他字段一起建立联合索引 | 必须单独建立索引 |
删除表记录效率 | 重建表 | 逐行删除 |
锁 | 表锁 | 行锁,但可能锁全表 |
适用场景 | 查询为主的应用 | 频繁修改和安全性较高的应用 |
并发性 | 较小 | 较大 |
性能 | 查询快,插入更新慢 | 插入更新快,查询相对慢 |
其他特点 | 索引压缩、全表锁、支持全文搜索 | 数据和索引分离、表空间组织 |