# 16.2 MyISAM 存储引擎
MyISAM
基于旧的(不再可用)是
存储引擎,但有许多有用的扩展。
表 16.2 MyISAM 存储引擎功能
特征 | 支持 |
---|---|
B树索引 | 是的 |
备份/时间点恢复(在服务器中实现,而不是在存储引擎中。) | 是的 |
集群数据库支持 | 不 |
聚集索引 | 不 |
压缩数据 | 是(仅当使用压缩行格式时才支持压缩的 MyISAM 表。使用带有 MyISAM 的压缩行格式的表是只读的。) |
数据缓存 | 不 |
加密数据 | 是(通过加密功能在服务器中实现。) |
外键支持 | 不 |
全文检索索引 | 是的 |
地理空间数据类型支持 | 是的 |
地理空间索引支持 | 是的 |
哈希索引 | 不 |
索引缓存 | 是的 |
锁定粒度 | 桌子 |
MVCC | 不 |
复制支持(在服务器中实现,而不是在存储引擎中。) | 是的 |
存储限制 | 256TB |
T-树索引 | 不 |
交易 | 不 |
更新数据字典的统计信息 | 是的 |
每个MyISAM
表存储在磁盘上的两个文件中。这些文件的名称以表名开头,并具有指示文件类型的扩展名。数据文件有一个.MYD
(MYData
) 延期。索引文件有一个。我的我
(MYIndex
) 延期。表定义存储在 MySQL 数据字典中。
明确指定您想要一个MyISAM
表,表明与引擎
表选项:
CREATE TABLE t (i INT) ENGINE = MYISAM;
在 MySQL 8.0 中,通常需要使用引擎
指定MyISAM
存储引擎,因为InnoDB
是默认引擎。
您可以检查或维修MyISAM
表与mysql检查客户或迈萨姆奇克效用。你也可以压缩MyISAM
表myisampack占用更少的空间。看第 4.5.3 节,“mysqlcheck - 一个表维护程序”,第 4.6.4 节,“myisamchk - MyISAM 表维护实用程序”, 和第 4.6.6 节,“myisampack - 生成压缩的只读 MyISAM 表”.
在 MySQL 8.0 中,MyISAM
存储引擎不提供分区支持。分区MyISAM
在 MySQL 8.0 中不能使用在以前版本的 MySQL 中创建的表.有关详细信息,请参阅第 24.6.2 节,“与存储引擎相关的分区限制”.有关升级此类表以便它们可以在 MySQL 8.0 中使用的帮助,请参阅第 2.11.4 节,“MySQL 8.0 中的更改”.
MyISAM
表具有以下特点:
所有数据值都以低字节优先存储。这使得数据机和操作系统独立。二进制可移植性的唯一要求是机器使用二进制补码有符号整数和 IEEE 浮点格式。这些要求在主流机器中被广泛使用。二进制兼容性可能不适用于有时具有特殊处理器的嵌入式系统。
首先存储数据低字节没有明显的速度损失;表行中的字节通常是未对齐的,按顺序读取未对齐字节所需的处理时间比按相反顺序读取的处理时间要多。此外,与其他代码相比,服务器中获取列值的代码不是时间关键的。
所有数字键值都以高字节优先存储,以允许更好的索引压缩。
支持大文件的文件系统和操作系统支持大文件(文件长度最大为 63 位)。
有一个限制(232)2(1.844E+19) 行
MyISAM
桌子。每个索引的最大数量
MyISAM
表是 64。每个索引的最大列数为 16。
最大密钥长度为 1000 字节。这也可以通过更改源并重新编译来更改。对于长度超过 250 字节的密钥,使用比默认值 1024 字节更大的密钥块大小。
当按排序顺序插入行时(如您使用
自动递增
列),索引树被拆分,使得高节点只包含一个键。这提高了索引树中的空间利用率。内部处理一
自动递增
支持每个表的列。MyISAM
自动更新此列插入
和更新
操作。这使得自动递增
列速度更快(至少 10%)。序列顶部的值在被删除后不会被重用。(当一个自动递增
column 被定义为多列索引的最后一列,重复使用从序列顶部删除的值确实会发生。)自动递增
值可以重置更改表
要么迈萨姆奇克.将删除与更新和插入混合使用时,动态大小的行碎片更少。这是通过自动组合相邻的已删除块并在下一个块被删除时扩展块来完成的。
MyISAM
支持并发插入:如果一个表在数据文件中间没有空闲块,你可以插入
在其他线程从表中读取的同时将新行写入其中。由于删除行或更新具有比当前内容更多的数据的动态长度行,可能会出现空闲块。当所有空闲块都用完(填充)时,未来的插入再次变为并发。看第 8.11.3 节,“并发插入”.您可以将数据文件和索引文件放在不同物理设备上的不同目录中,以获得更快的速度
数据目录
和索引目录
表选项创建表
.看第 13.1.20 节,“CREATE TABLE 语句”.空值
索引列中允许值。每个密钥需要 0 到 1 个字节。每个字符列可以有不同的字符集。看第 10 章,字符集、排序规则、Unicode.
里面有一面旗帜
MyISAM
指示表是否正确关闭的索引文件。如果mysqld开始于myisam_recover_options
系统变量集,MyISAM
打开时会自动检查表,如果表未正确关闭,则会进行修复。迈萨姆奇克如果您使用
--更新状态
选项。myisamchk --fast只检查那些没有这个标记的表。myisamchk——分析存储部分键的统计信息,以及整个键的统计信息。
myisampack可以打包
斑点
和VARCHAR
列。
MyISAM
还支持以下功能:
表与
VARCHAR
列可能具有固定或动态的行长度。任意长度
独特
约束。
# 其他资源
- 一个专门的论坛
MyISAM
存储引擎可在https://forums.mysql.com/list.php?21 (opens new window).