特点

  • MyISAM不支持事务
  • 不支持外键

    优势

    访问速度快。对事务完整性没有要求或者以SELECTINSERT为主的应用基本上可以使用这个引擎来创建表。

    存储

    每个MyISM存储成3个文件,其文件名和表名相同,但扩展名分别是:

  • .frm(存储表定义);

  • .MYD(MYData存储数据);
  • .MYI(MYIndex,存储索引)。

不同的MyISAM表的索引文件和数据文件可以放置到不同的路径下,平均分布IO,获得更快的速度。文件路径需要是绝对路径,并且具有访问权限。通过DATA DIRECTORYINDEX DIRECTOCRY指定。
MyISAM支持三种不同的存储格式,分别是:

  • 静态表(固定长度)表;(默认

    • 字段都是非变长字段,每个记录都是固定长度。
    • 优点:存储迅速,容易缓存,出现故障容易恢复。
    • 缺点:占用空间通常比动态表多。
    • 问题:静态表数据在存储是会按照列的宽度补充空格(尾部补充),但是访问时会被去掉。但是如果保存的数据本来就带有空格,访问时也会被去掉。eg:
      1. mysql> create table `test5`(`str` char(10)) engine=myisam;
      2. mysql> insert into `test5` values ('kylin ');
      3. mysql> select length(`str`) from `test5`;
      4. +---------------+
      5. | length(`str`) |
      6. +---------------+
      7. | 5 |
      8. +---------------+
  • 动态表

    • 包含变长字段,记录不固定长度,占用空间相对较少。
    • 频繁更新和删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令改善性能。
    • 故障恢复比较困难。
  • 压缩表

    • myisam工具创建,占据非常小的磁盘空间。
    • 每个记录被单独压缩,访问开支非常小。

      场景

  • 应用是以插入和查询操作为主,有少量的修改和删除操作。

  • 对事务完整性和并发要求不是很高。