MySQL5.0支持的存储引擎包含MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
MySQL5.5之前默认存储引擎是MyISAM,之后是InnoDB
MyISAM不支持事务不支持外键,优势是访问速度快,多用于读多余写的情况。
每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,扩展名分别是:
- .frm(存储表定义)
- .MYD(MYData,存储数据)
- .MYI(MYIndex,存储索引)
数据文件和索引文件可以放置在不同的目录,平均分布IO。获得更快的速度。
MyISAM类型的表可能会损坏,可以用CHECK TABLE语句来检查表的健康,并用REPAIR TABLE语句修复损坏的表。
MyISAM的表支持3中不用的存储格式:
- 静态(固定长度)表
- 动态表
- 压缩表
静态表是默认存储格式,每条记录长度固定,不能扩容,如果数据长度不够,将用空格补足;
优点:存储非常迅速,容易缓存,出现故障容易恢复;
缺点:占用的空间通常比动态表多,同时获取数据时会自动去除后面的空格,如果数据保存时本来是希望有空格,那这里拿出来的数据将于期望的不同。
动态表,包含变长字段,记录不是固定长度的,优点:占用的空间相对较少,但是频繁的更新和删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,并且出现故障时恢复相对比较困难。
压缩表由myisampack工具创建,占据非常小的磁盘空间,因为每个记录都是被单独压缩的,所以只有非常小的访问开支。
查看当前数据库支持的存储引擎:
show engines;
查看表使用的存储引擎:
show table status from <db_name> where name='<table_name>';