要获取 MyISAM 表的描述或其统计信息,请使用此处显示的命令。本节稍后将解释这些命令的输出。
tbl_name 参数可以是 MyISAM 表的名称,也可以是其索引文件的名称,如 第 6.6.4 节“myisamchk — MyISAM 表维护实用程序” 中所述。可以给出多个 tbl_name 参数。
假设名为 person 的表具有以下结构。(包含 MAX_ROWS 表选项,以便在稍后显示的 myisamchk 的示例输出中,某些值更小,并且更适合输出格式。)
CREATE TABLE person
(
id INT NOT NULL AUTO_INCREMENT,
last_name VARCHAR(20) NOT NULL,
first_name VARCHAR(20) NOT NULL,
birth DATE,
death DATE,
PRIMARY KEY (id),
INDEX (last_name, first_name),
INDEX (birth)
) MAX_ROWS = 1000000 ENGINE=MYISAM;还假设该表具有以下数据和索引文件大小
-rw-rw---- 1 mysql mysql 9347072 Aug 19 11:47 person.MYD
-rw-rw---- 1 mysql mysql 6066176 Aug 19 11:47 person.MYImyisamchk -dvv 输出示例
MyISAM file: person
Record format: Packed
Character set: utf8mb4_0900_ai_ci (255)
File-version: 1
Creation time: 2017-03-30 21:21:30
Status: checked,analyzed,optimized keys,sorted index pages
Auto increment key: 1 Last value: 306688
Data records: 306688 Deleted blocks: 0
Datafile parts: 306688 Deleted data: 0
Datafile pointer (bytes): 4 Keyfile pointer (bytes): 3
Datafile length: 9347072 Keyfile length: 6066176
Max datafile length: 4294967294 Max keyfile length: 17179868159
Recordlength: 54
table description:
Key Start Len Index Type Rec/key Root Blocksize
1 2 4 unique long 1 1024
2 6 80 multip. varchar prefix 0 1024
87 80 varchar 0
3 168 3 multip. uint24 NULL 0 1024
Field Start Length Nullpos Nullbit Type
1 1 1
2 2 4 no zeros
3 6 81 varchar
4 87 81 varchar
5 168 3 1 1 no zeros
6 171 3 1 2 no zeros此处给出了对 myisamchk 生成的信息类型的解释。“Keyfile” 指的是索引文件。“Record” 和 “row” 是同义词,“field” 和 “column” 也是如此。
表描述的初始部分包含以下值
MyISAM 文件MyISAM(索引)文件的名称。记录格式用于存储表行的格式。前面的示例使用
Fixed length。其他可能的值是Compressed和Packed。(Packed对应于SHOW TABLE STATUS报告为Dynamic的内容。)字符集表的默认字符集。
文件版本MyISAM格式的版本。始终为 1。创建时间数据文件的创建时间。
恢复时间上次重建索引/数据文件的时间。
状态表状态标志。可能的值为
crashed、open、changed、analyzed、optimized keys和sorted index pages。自动递增键、最后一个值与表的
AUTO_INCREMENT列关联的键号,以及此列最近生成的值。如果没有此类列,则不会显示这些字段。数据记录表中的行数。
已删除的块有多少个已删除的块仍然具有保留空间。您可以优化表以最小化此空间。请参阅 第 9.6.4 节“MyISAM 表优化”。
数据文件部分对于动态行格式,这表示有多少个数据块。对于没有碎片行的优化表,这与
数据记录相同。已删除的数据有多少字节的未回收已删除数据。您可以优化表以最小化此空间。请参阅 第 9.6.4 节“MyISAM 表优化”。
数据文件指针数据文件指针的大小,以字节为单位。通常为 2、3、4 或 5 个字节。大多数表使用 2 个字节,但这还不能从 MySQL 中控制。对于固定表,这是行地址。对于动态表,这是字节地址。
索引文件指针索引文件指针的大小,以字节为单位。通常为 1、2 或 3 个字节。大多数表使用 2 个字节,但这由 MySQL 自动计算。它始终是一个块地址。
最大数据文件长度表数据文件可以达到的长度,以字节为单位。
最大索引文件长度表索引文件可以达到的长度,以字节为单位。
记录长度每行占用的空间大小,以字节为单位。
输出的 表描述 部分包括表中所有键的列表。对于每个键,myisamchk 都会显示一些低级信息
键此键的编号。此值仅显示在键的第一列。如果缺少此值,则该行对应于多列键的第二列或后续列。对于示例中显示的表,第二个索引有两行
表描述。这表示它是一个包含两部分的多部分索引。开始索引的这一部分在行中的起始位置。
长度此索引部分的长度。对于压缩数字,这应该始终是列的完整长度。对于字符串,它可能比索引列的完整长度短,因为您可以索引字符串列的前缀。多部分键的总长度是所有键部分的
Len值的总和。索引键值是否可以在索引中存在多次。可能的值为
unique或multip.(多个)。类型索引的这一部分具有什么数据类型。这是一种
MyISAM数据类型,可能的值为packed、stripped或empty。根根索引块的地址。
块大小每个索引块的大小。默认情况下,这是 1024,但当从源代码构建 MySQL 时,可以在编译时更改该值。
记录/键这是优化器使用的统计值。它告诉您此索引的每个值有多少行。唯一索引的值始终为 1。在使用 myisamchk -a 加载(或大幅更改)表后,可能会更新此值。如果根本没有更新,则给出默认值 30。
输出的最后一部分提供有关每一列的信息
字段列号。
开始列在表行中的字节位置。
长度列的长度(以字节为单位)。
Nullpos、Nullbit对于可以为
NULL的列,MyISAM将NULL值存储为一个字节中的标志。根据可为空列的数量,可以使用一个或多个字节来实现此目的。如果Nullpos和Nullbit值不为空,则表示哪个字节和位包含该标志,指示该列是否为NULL。用于存储
NULL标志的位置和字节数显示在字段 1 的行中。这就是为什么person表有六个Field行,即使它只有五列。类型数据类型。该值可以包含以下任何描述符
常量所有行都具有相同的值。
无尾随空格不存储尾随空格。
无尾随空格,并非始终如此不存储尾随空格,并且不对所有值进行尾随空格压缩。
无尾随空格,无空值不存储尾随空格。不存储空值。
表查找该列已转换为
ENUM。零填充(N)值中最左边的
N个字节始终为 0,并且不存储。无零不存储零。
始终为零零值使用一位存储。
霍夫曼树与该列关联的霍夫曼树的编号。
位霍夫曼树中使用的位数。
如果使用 myisampack 压缩了表,则会显示 Huff tree 和 Bits 字段。有关此信息的示例,请参见 第 6.6.6 节,“myisampack — 生成压缩的、只读的 MyISAM 表”。
myisamchk -eiv 输出示例
Checking MyISAM file: person
Data records: 306688 Deleted blocks: 0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024:
- check index reference
- check data record references index: 1
Key: 1: Keyblocks used: 98% Packed: 0% Max levels: 3
- check data record references index: 2
Key: 2: Keyblocks used: 99% Packed: 97% Max levels: 3
- check data record references index: 3
Key: 3: Keyblocks used: 98% Packed: -14% Max levels: 3
Total: Keyblocks used: 98% Packed: 89%
- check records and index references
*** LOTS OF ROW NUMBERS DELETED ***
Records: 306688 M.recordlength: 25 Packed: 83%
Recordspace used: 97% Empty space: 2% Blocks/Record: 1.00
Record blocks: 306688 Delete blocks: 0
Record data: 7934464 Deleted data: 0
Lost space: 256512 Linkdata: 1156096
User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage: 1046926 bytes (1023k)myisamchk -eiv 输出包括以下信息
数据记录表中的行数。
已删除的块有多少个已删除的块仍然具有保留空间。您可以优化表以最小化此空间。请参阅 第 9.6.4 节“MyISAM 表优化”。
键键号。
使用的键块使用了多少百分比的键块。当使用 myisamchk 重新组织表后,这些值非常高(非常接近理论最大值)。
已压缩MySQL 尝试压缩具有相同后缀的键值。这只能用于
CHAR和VARCHAR列上的索引。对于具有相似最左侧部分的长索引字符串,这可以显著减少使用的空间。在前面的示例中,第二个键长 40 个字节,并实现了 97% 的空间减少。最大级别此键的 B 树有多深。具有长键值的大型表会获得较高的值。
记录表中有多少行。
平均记录长度平均行长度。对于具有固定长度行的表,这是确切的行长度,因为所有行都具有相同的长度。
已压缩MySQL 会从字符串末尾删除空格。
Packed值表示通过执行此操作实现的节省百分比。已使用的记录空间使用了多少百分比的数据文件。
空闲空间数据文件中未使用的百分比。
块/记录每行的平均块数(即,一个碎片行由多少个链接组成)。对于固定格式表,此值始终为 1.0。此值应尽可能接近 1.0。如果它变得太大,则可以重新组织表。请参见 第 9.6.4 节,“MyISAM 表优化”。
记录块使用了多少个块(链接)。对于固定格式表,这与行数相同。
删除块删除了多少个块(链接)。
记录数据数据文件中使用了多少字节。
已删除的数据数据文件中删除了多少字节(未使用)。
丢失的空间如果将行更新为较短的长度,则会丢失一些空间。这是所有此类损失的总和,以字节为单位。
链接数据使用动态表格式时,行碎片通过指针(每个指针 4 到 7 个字节)链接。
Linkdata是所有此类指针使用的存储量的总和。