3.1.1 MylSAM

3.1.1 MylSAM

MyISAM自版本3.23开始成为MySQL的默认存储引擎(windows中默认为InnoDB)。它解决了其前身(ISAM)的很多不足。对于初学者来讲,MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器。此外,MyISAM表一般能够存储更多数据,却比其前身使用更少的存储空间。MyISAM表还有一些用于数据完整性和压缩的工具,它们都与MySQL捆绑在一起。

MyISAM表无法处理事务,这意味着应当对所有非事务需求使用此类型,从而不会带来事务型存储引擎(如InnoDB)所需的额外开销。MyISAM存储引擎特别适合应用于如下情况。

➢ 选择密集的表。MyISAM存储引擎在大量数据中筛选非常迅速,甚至在高流量环境中也是如此。

➢ 插入密集的表。MyISAM的并发插入特性允许同时选择和插入数据。例如,MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

MyISAM存储引擎是如此重要的一个MySQL组件,所以在其优化方面已经做了很多努力。所采用的一种关键方法是通过创建三种MyISAM格式——静态、动态和压缩。MySQL会自动根据表结构的特定情况应用最佳的格式类型。下面将介绍这些格式。

1.MyISAM静态

如果所有表列的大小都是静态的(即不使用xBLOB、xTEXT或VARCHAR数据类型),MySQL就会自动。使用静态MyISAM格式。使用这种类型的表性能非常高,因为在维护和访问以预定义格式存储的数据时需要很低的开销。但是,这项优点要以空间为代价,因为每列都需要分配给该列的最大空间,而无论该空间是否真正地使用。

因为静态表始终占用表定义中指定的空间,而动态表只使用所插入数据需要的空间。但是,不要因为这个就以为只应使用MyISAM动态格式。相反,要花些时间阅读关于此存储引擎特点的更多信息,包括下面将介绍的缺点。

2.MyISAM动态

如果有表列(即使只有一列)定义为动态的(使用xBLOB、xTEXT或VARCHAR),MySQL就会自动使用动态格式。虽然MyISAM动态表占用的空间比静态格式所占空间少,但空间的节省带来了性能的下降。如果某个字段的内容发生改变,则其位置很可能就需要移动,这会导致碎片的产生。随着数据集中的碎片增加,数据访问性能就会相应降低。这个问题有两种修复方法。

➢ 尽可能使用静态数据类型。

➢ 经常使用OPTIMIZE TABLE语句,它会整理表的碎片,恢复由于表更新和删除而导致的空间丢失。

3.MyISAM压缩

有时会创建在整个应用程序生命周期中都只读的表。如果是这种情况,就可以使用myisampack工具将其转换为MyISAM压缩表来减少空间。在给定的硬件配置下(例如,快速的处理器和低速的硬盘驱动器),性能的提升将相当显著。