Mysql自从5.5版本以后,默认采用InnoDB存储引擎,那么,除InnoDB外,Mysql还有没有其他存储引擎?我们可以用 SHOW ENGINES查询引擎(只需关注4种常用引擎即可:InnoDB、MyISAM、MEMORY、MRG_MYISAM),如果你想查看当前表的存储引擎,使用命令show create table table名即可。
Support列的值表示某种引擎是否能够使用,YES表示可以使用,NO表示不可以使用,DEFAULT表示当前默认存储引擎。
1)InnoDB
InnoDB是一个健壮的事务型存储引擎,是5.5以后默认存储引擎,也是最常用的存储引擎之一。它提供了事务安全(ACID兼容)表,支持外键引用完整性约束,支持提交、回滚和紧急恢复功能来保护数据,同时还支持行级锁定。适用如下场景:
更新密集的表:适合处理多重并发的更新请求
事务:支持事务
自动灾难恢复:与其它存储引擎不同,InnoDB表能够自动从灾难中恢复
外键约束:Mysql中支持外键的存储引擎只有InnoDB
自动递增:支持自动增加列AUTO_INCREMENT属性
2)MyISAM
MyISAM表是独立于操作系统的,所以移植方便,优势是访问速度快但是缺陷就是无法处理事务。支持3种不同的存储格式,分别是静态(固定长度)表、动态表、压缩表,其中,静态表是默认的存储格式。
静态表:字段是非变长字段,记录是固定长度的(长度不足补空格),优点是存储非常迅速,容易缓存,出现故障容易修复;缺点是占用的空间通常比动态多(补空格)。
说明:MyISAM引擎在读取数据的时默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。
动态表:字段是变长字段,记录不是固定长度的,优点是占用的空间相对较少,缺点是频繁的更新和删除记录会导致碎片产生,所以要定时进行碎片整理:定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,所以出现故障时恢复相对困难。
压缩表:由myisam工具创建,占据非常小的磁盘空间。因为每个记录是被单独压缩的,所有只有非常小的访问开支。
MyISAM存储引擎适用场景:
选择密集型的表:MyISAM存储引擎在筛选大量数据时非常迅速(提供高速存储和检索以及全文搜索能力)
插入密集型的表:MyISAM的并发插入特性允许同时选择和插入数据,所以MyISAM存储引擎很适合管理邮件或Web服务器日志数据等
MyISAM存储引擎和INNODB存储引擎的对比:
MyISAM不支持事务 INNODB支持事务
MyISAM不支持外键 INNODB支持外键
MYISAM加锁读取 INNODB不加锁读取
MyISAM支持全文索引 INNODB不支持全文索引
MyISAM查询速度更快 INNODB添加、修改、删除速度更快