首页 > 数据库 > > 15.2 MyISAM 存储引擎
参考官方文档:
https://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html
MyISAM基于较旧(且不再可用)的ISAM存储引擎,但具有许多有用的扩展。
不支持外键,不支持事务
每个MyISAM表都以三个文件存储在磁盘上。 这些文件的名称以表名开头,并具有指示文件类型的扩展名。 .frm文件存储表格式。 数据文件具有.MYD(MYData)扩展名。 索引文件具有.MYI(MYIndex)扩展名。
要明确指定您需要MyISAM表,请使用ENGINE表选项指示:
CREATE TABLE t (i INT) ENGINE = MYISAM;
在MySQL 5.7中,通常需要使用ENGINE来指定MyISAM存储引擎,因为InnoDB是默认引擎。
您可以使用mysqlcheck客户端或myisamchk实用程序检查或修复MyISAM表。 您还可以使用myisampack压缩MyISAM表以占用更少的空间。 请参见第4.5.3节“mysqlcheck - 表维护程序”,第4.6.3节“myisamchk - MyISAM表维护实用程序”和第4.6.5节“myisampack - 生成压缩,只读MyISAM表”。
MyISAM表具有以下特征:
首先存储低字节数据没有明显的速度损失; 表行中的字节通常是未对齐的,并且按顺序读取未对齐字节所需的处理比按相反顺序处理要少得多。 此外,与其他代码相比,服务器中获取列值的代码的时间不是关键。
每个索引的最大列数为16。
MyISAM还支持以下功能:
其他资源
有关MyISAM存储引擎的论坛可在http://forums.mysql.com/list.php?21上找到。
MyISAM表使用B树索引。 您可以粗略地计算索引文件的大小为(key_length + 4)/0.67,对所有键求和。 当所有键按排序顺序插入并且表没有任何压缩键时是最糟糕的情况。
字符串索引是空间压缩的。 如果第一个索引部分是字符串,则它也是前缀压缩的。 如果字符串列具有大量尾随空格或者不是总是用于全长的VARCHAR列,则空间压缩会使索引文件小于最坏情况。 前缀压缩用于以字符串开头的键。 如果有许多字符串具有相同的前缀,则前缀压缩会有所帮助。
在MyISAM表中,您还可以在创建表时通过指定PACK_KEYS = 1表选项为压缩数字前缀。 数字首先以高字节存储,因此当您有许多具有相同前缀的整数键时,这会有所帮助。
15.2.4 MyISAM 表问题
MySQL用于存储数据的文件格式已经过广泛测试,但始终存在可能导致数据库表损坏的情况。 以下讨论描述了这种情况如何发生以及如何处理。
15.2.4.1 被损坏的 MYISAM 表
即使MyISAM表格式非常可靠(在语句返回之前写入由SQL语句对表的所有更改),如果发生以下任何事件,您仍然可以获得损坏的表:
损坏表的典型症状是:
您可以使用CHECK TABLE语句检查MyISAM表的运行状况,并使用REPAIR TABLE修复损坏的MyISAM表。 当mysqld未运行时,您还可以使用myisamchk命令检查或修复表。
如果您的表经常损坏,您应该尝试确定为什么会发生这种情况。 最重要的是要知道表是否因服务器崩溃而损坏。 您可以通过在错误日志中查找最近重新启动的mysqld消息来轻松验证这一点。 如果存在这样的消息,则表损坏很可能是服务器死亡的结果。 否则,在正常操作期间可能发生损坏, 这是一个错误。 您应该尝试创建一个可重现的测试用例来演示该问题。
15.2.4.2 表未正确关闭中的问题
每个MyISAM索引文件(.MYI文件)在标头中都有一个计数器,可用于检查表是否已正确关闭。 如果从CHECK TABLE或myisamchk收到以下警告,则表示此计数器已不同步:
clients are using or haven't closed the table properly
此警告并不一定意味着表已损坏,但您至少应检查该表。
该计数器的工作原理如下:
换句话说,只有在以下条件下,计数器才会变得不正确:
通常,在多个服务器之间共享数据目录是个坏主意。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3143523/ ,如需转载,请注明出处,否则将追究法律责任。