存储引擎:MyIsam概述

MyIsammysql5.5之前默认的存储引擎,缺点是 不支持事务,不支 持外键,优点:批量插入和查询数据快,不支持事务安全或者主要以查询,插入为主的业务表的创建,可以定义为myisam存储引擎。

  • 每个myisam在磁盘上存储成3个文件,文件名和表名相同,但扩展名为:
    .frm(存储表结构定义)
    .MYD(MYData ,存储数据)
    .MYI(MYIndex , 索引数据)
  • 数据文件 和索引文件可以放在不同目录下,平均分布IO,获得更快的速度。
         要指定索引文件和数据文件的路径,需要在创建表的时候通过data directory和 index directory语句指定,也就是说不同myisam表的索引文件和数据文件可以放置到不同路径下。文件路径需要是绝对路径,并且具有访问权限。
  • myisam类型的表可能会损坏,原因可能是多种多样的,损坏后的表可能不能被访问,会提示需要修复或者访问后返回错误的结果。
    myisam类型的表提供修复的工具,可以用check table 语句来检查 myisam表的健康,并用repair table 语句修复一个损坏的myisam表。表损坏可能导致数据库异常重新启动,需要尽快并尽可能的确认损坏的原因。
  • myisam表支持三种不同的存储格式:
    静态表(长度固定);
    动态表;
    压缩表。
    静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用空间通常比动态表多。
  • 静态表的数据在存储时会按照列的宽度定义不足空格,但是访问的时候得不到这些空格,因为在返回给应用结果的时候会过滤掉这些空格。但是如果需要保存的内容末尾本身包含空格,在获取的时候,依然会被过滤掉。所以开发的时候要注意,因为默认的就是静态存储格式。如下插入内容本身包含空格:
create table myisam_char(id int(10),name char(10))engine=myisam;
insert into myisam_char values(1,'asdf'),(2,'asdf  '),(3,'   asdfsd'),(4,'  sdf  ');
select name ,length(name) from myisam_char;

这里写图片描述
这里写图片描述
从上可知,获取内容时,后面的空格都被过滤掉,前面的空格保留了。动态表中包含变长字段,记录长度不是固定的,存储有点是占用空间较少,但是频繁更新和删除记录会产生碎片,需要定期执行optimize table 语句或 myisamchk-r命令来改善性能,在出现故障时恢复相对比较困难。
压缩表由 myisampack工具创建,占据非常小的磁盘空间。因为每个记录是呗单独压缩的,所以只有非常小的访问开支。

参考资料:
- https://blog.csdn.net/redbloodbody/article/details/58185240
- 《数据库开发、优化与管理维护》人民邮电出版社 。

猜你喜欢

转载自blog.csdn.net/qq_17033579/article/details/82115455
今日推荐