Mysql存储引擎之MyISAM

上面简单介绍了存储引擎,其中有一个是MyISAM。MyISAM不支持事务,也不支持外键,其优势是访问速度快,对事务完整性没有要求或者以select、insert为主的应用基本上都可以使用这个引擎来创建表。

Mysql存储引擎之MyISAM

不支持事务

Mysql存储引擎之MyISAM

不支持外键

每个MyISAM在磁盘上存储为3个文件,其文件名和表名相同,但是拓展名分别是:

  1. .frm(存储表定义)

  2. .MYD(MyData,存储数据)

  3. .MYI(MyIndex,存储索引)

数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度。

要指定索引文件和数据文件的路径,需要在创建表的时候通过data directory和index dirextory语句指定,也就是说不同MyISAM表的索引文件和数据文件可以放置到不同的路径下。文件路径需要的是绝对路径,并且具有访问权限。

MyISAM的表还支持三种不同的存储格式,分别是:

  1. 静态(固定长度)表

  2. 动态表

  3. 压缩表

其中静态表示默认的存储格式。静态表中的字段都是非变长字段,这样,每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。静态表的数据在存储时会按照列的宽度定义不足空格,但是在应用访问的时候并不会得到这些空格,这些空格在返回给应用之前就已经去掉。

但是也有些需要注意的问题,如果需要保存的内容后面本来就带有空格,那么在返回结果的时候也会被去掉,在编写程序的时候需要特别注意,因为静态表是默认的存储格式,所以可能会丢失掉尾部的空格。

Mysql存储引擎之MyISAM

去掉前面的空格

从上面的例子可以看出,插入记录后面的空格都被去掉了,前面的空格保留了。

动态表中包含变长字段,记录不是固定长度,这样存储的有点是占用的空间相对较少,但是频繁的更新和删除记录会产生碎片。需要定期执行OPTIMIZE Table 语句或myisamchk-r命令来改善性能,并且在出现故障时恢复相对比较困难。

压缩表由myisampack工具创建,占据非常小的磁盘空间。因为每个记录是被单独压缩的,所以只有非常小的访问开支。

评论

目前评论:0   

点击加载更多评