Mysql数据库支持多种存储引擎,不同的存储引擎有其适用的场景,选择合适的存储引擎是Mysql优化的策略之一。
常见的存储引擎有:MyISAM、Innodb、Memory
Innodb
MySQL5.5以及之后的版本采用innodb作为默认的存储引擎,主要特点如下:
- 支持行级锁
- 支持外键约束
- 完备的事务机制,实现了四种隔离级别
- 可靠性号,崩溃后修复能力较高
文件格式:
- .frm(存储表定义)
- 共享表空间文件:ibdata1
- 私有表空间文件:表名.ibd
- redo log文件
适用场景:数据修改频繁,对事务特性要求比较高(如金融系统),需要支持并发处理能力的系统。
MYISAM
MySQL5.5以前采用MYISAM作为默认的存储引擎,主要特点如下:
- 比较强调读取效率,查询速度较快
- 磁盘空间占用少
- 只支持表级锁,并发能力较差
- 不支持事务,灾难恢复能力较差
文件格式:
- .frm(存储表定义)
- MYD(MYData,存储数据)
- MYI(MYIndex,存储索引)
适用场景:数据很少更新,一次插入,多次读取的业务场景。
MEMORY
类似于内存缓存,表结构的定义存在磁盘上(frm文件),实际数据是存储在内存中,响应速度比较快。
- 响应速度快
- 表级锁,频繁更新数据可能会造成并发瓶颈
- 不支持可变字段(但可以借助verchar实现文本存储)
- 数据可靠性很差,机器或MySQL服务器重启后,就会丢失
- 需要机器有足够的内存
适用场景:数据量不大,需要被频繁的访问,而且数据丢失不会对业务产生比较严重的影响。