MyISAM是默认存储引擎(Mysql5.1前)。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。 每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。
MyISAM 是默认存储引擎(Mysql5.1 前)。它基于更老的 ISAM 代码,但有很多有用的扩展。(注意 MySQL 5.1 不支持 ISAM)。 每个 MyISAM 在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。
.frm 文件存储表定义;·MYD (MYData)文件存储表的数据;.MYI (MYIndex)文件存储表的索引。
简介
要明确表示你想要用一个 MyISAM 表格,请用 ENGINE 表选项指出来:
CREATE TABLE t (i INT) ENGINE = MYISAM;
注释:老版本的 MySQL 使用 TYPE 而不是 ENGINE(例如,TYPE = MYISAM)。MySQL 5.1 为向下兼容而支持这个语法,但 TYPE 现在被轻视,而 ENGINE 是首先的用法。
一般地,ENGINE 选项是不必要的;除非默认已经被改变了,InnoDB 是默认存储引擎(Mysql 5.1 后)。
你可以用 myisamchk 工具来检查或修复 MyISAM 表。请参阅 MySQL 5.1 参考手册 5.9.5.6 节,“使用 myisamchk 做崩溃恢复”。你也可以用 myisampack 来压缩 MyISAM 表,让它们占更少的空间。请参阅 MySQL 5.1 参考手册 8.2 节,“myisampack,产生压缩、只读的 MyISAM 表”。
特征
MyISAM 存储引擎的一些特征
1. 所有数据值先存储低字节。这使得数据机和操作系统分离。二进制轻便性的唯一要求是机器使用补码(如最近 20 年的机器有的一样)和 IEEE 浮点格式(在主流机器中也完全是主导的)。唯一不支持二进制兼容性的机器是嵌入式系统。这些系统有时使用特殊的处理器。
先存储数据低字节并不严重地影响速度;数据行中的字节一般是未联合的,从一个方向读未联合的字节并不比从反向读更占用更多的资源。服务器上的获取列值的代码与其它代码相比并不显得时间紧。
2.大文件(达 63 位文件长度)在支持大文件的文件系统和操作系统上被支持。
3. 当把删除和更新及插入混合的时候,动态尺寸的行更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。
7. NULL 值被允许在索引的列中。这个占每个键的 0-1 个字节。
8. 所有数字键值以高字节为先被存储以允许一个更高地索引压缩。
9. 当记录以排好序的顺序插入(就像你使用一个 AUTO_INCREMENT 列之时),索引树被劈开以便高节点仅包含一个键。这改善了索引树的空间利用率。
10.每表一个 AUTO_INCREMENT 列的内部处理。MyISAM 为 INSERT 和 UPDATE 操作自动更新这一列。这使得 AUTO_INCREMENT 列更快(至少 10%)。在序列顶的值被删除之后就不能再利用。(当 AUTO_INCREMENT 列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。AUTO_INCREMENT 值可用 ALTER TABLE 或 myisamch 来重置。
11. 如果数据文件中间的表没有自由块了,在其它线程从表读的同时,你可以 INSERT 新行到表中。(这被认识为并发操作)。自由块的出现是作为删除行的结果,或者是用比当前内容多的数据对动态长度行更新的结果。当所有自由块被用完(填满),未来的插入又变成并发。
12.你可以把数据文件和索引文件放在不同目录,用 DATA DIRECTORY 和 INDEX DIRECTORY 选项 CREATE TABLE 以获得更高的速度。