MySQL的存储引擎
本文最后更新于:2 年前
主要介绍MySQL 的常见的四种储存引擎的特点。
MySQL体系架构
插件式的表存储引擎。
优势:可以根据具体的应用建立不同的存储引擎表。
InnoDB
- 默认引擎。
- 事务型引擎。
- 最重要、使用最广泛。
- 处理大量短期(short-live)事务。
MyISAM
- 高速引擎
- 前默认引擎(5.1之前)
- 不支持事务和行级锁
- 崩溃后无法安全修复
- 表级锁,容易产生性能问题
Memory
- 极高速引擎。比MyISAM快一个数量级(10倍)
- 支持插入、更新、查询
- 文件存储在内存中
- 重启表结构保存,数据丢失
- 应用: 查找(lookup)/映射表(mapping)、缓存周期性聚合数据(periodically aggregated data)的结果、保存数据分析的中间数据。
Archive
- 仅支持INSERT和SELECT操作。缓存所有写。
- 磁盘IO少(较其他)。利用zlib对插入的行进行压缩。
- SELECT是全表扫描
- 应用: 日志、数据采集类应用
CSV
- 可以直接处理CSV文件
- 不支持索引
- 应用: 跨平台数据交换
FaIcon
- 支持事务
InnoDB和MyISAM对比
- 事务。InnoDB支持事务。
- 外键。InnoDb支持外键。(包含外键的InnoDB转换MyISAM会失败)
- 聚集索引。InnoDB支持聚集索引。
- InnoDB
- 聚集索引文件保存在主键索引的叶子节点上,因此InnoDB必须要有主键。
- 主键索引效率高,但是辅助索引要查询两次(先查询主键,再通过主键查询数据)
- 因此主键不能太大,防止其他索引也会很大
- MyISAM
- 数据文件分离
- 索引保存数据文件的指针
- 主键索引和辅助索引相互独立
- InnoDB
- 查询速度。
- InnoDB不保存集体行数,执行
SELECT COUNT(*) FROM table
,全表搜索。 - MyISAM使用变量记录表的行数,对于上述语句执行很快。
- InnoDB不保存集体行数,执行
- 最小锁粒度。
- InnoDB是行锁
- MyISAM是表锁,会导致其他操作被阻塞,因此并发访问受限。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!