要获取MyISAM
表的描述或有关它的统计信息,请使用此处显示的命令。这些命令的输出将在本节后面解释。
tbl_name
参数可以是表
的MyISAM
名称或其索引文件的名称,如第 4.6.4 节“myisamchk — MyISAM 表维护实用程序”中所述。tbl_name
可以给出
多个参数。
假设名为的表person
具有以下结构。(MAX_ROWS
包含 table 选项,以便在稍后显示的
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.MYI
myisamchk -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 ”指的是索引文件。 “记录”和“行”是同义词,“字段”和“列”也是同义词。”
表描述的初始部分包含以下值:
MyISAM file
MyISAM
(索引)文件 的名称。Record format
用于存储表行的格式。前面的示例使用
Fixed length
. 其他可能的值是Compressed
和Packed
。(Packed
对应于SHOW TABLE STATUS
报告的内容Dynamic
。)Chararacter set
表默认字符集。
File-version
格式的版本
MyISAM
。总是 1。Creation time
创建数据文件的时间。
Recover time
上次重建索引/数据文件的时间。
Status
表状态标志。可能的值为
crashed
、open
、changed
、analyzed
、optimized keys
和sorted index pages
。Auto increment key
,Last value
与表的
AUTO_INCREMENT
列相关联的键号,以及最近为该列生成的值。如果没有这样的列,则不会出现这些字段。Data records
表中的行数。
Deleted blocks
有多少已删除的块仍有保留空间。您可以优化表以最小化此空间。请参阅 第 7.6.4 节,“MyISAM 表优化”。
Datafile parts
对于动态行格式,这表示有多少数据块。对于没有碎片行的优化表,这与
Data records
.Deleted data
有多少字节未回收的已删除数据。您可以优化表以最小化此空间。请参阅 第 7.6.4 节,“MyISAM 表优化”。
Datafile pointer
数据文件指针的大小,以字节为单位。它通常是 2、3、4 或 5 个字节。大多数表用 2 个字节管理,但这还不能从 MySQL 中控制。对于固定表,这是一个行地址。对于动态表,这是一个字节地址。
Keyfile pointer
索引文件指针的大小,以字节为单位。它通常是 1、2 或 3 个字节。大多数表用 2 个字节管理,但这是由 MySQL 自动计算的。它始终是一个块地址。
Max datafile length
表数据文件可以变成多长时间,以字节为单位。
Max keyfile length
表索引文件可以变成多长时间,以字节为单位。
Recordlength
每行占用多少空间,以字节为单位。
table description
输出部分包括表中所有键的列表
。对于每个键,
myisamchk显示一些低级信息:
Key
这把钥匙的号码。此值仅针对键的第一列显示。如果缺少此值,则该行对应于多列键的第二列或后面的列。对于示例中显示的表,第二个索引有两
table description
行。这表明它是一个包含两个部分的多部分索引。Start
这部分索引在行中的何处开始。
Len
索引的这一部分有多长。对于压缩数字,这应该始终是列的全长。对于字符串,它可能比索引列的全长更短,因为您可以索引字符串列的前缀。多部分密钥的总长度是
Len
所有密钥部分的值的总和。Index
一个键值是否可以在索引中多次存在。可能的值是
unique
或multip.
(多个)。Type
这部分索引的数据类型是什么。这是一种
MyISAM
数据类型,可能的值为packed
、stripped
或empty
。Root
根索引块的地址。
Blocksize
每个索引块的大小。默认情况下这是 1024,但是当从源代码构建 MySQL 时,该值可能会在编译时更改。
Rec/key
这是优化器使用的统计值。它告诉该索引的每个值有多少行。唯一索引的值始终为 1。这可能会在使用myisamchk -a加载(或大幅更改)表后更新。如果根本不更新,则给出默认值 30。
输出的最后部分提供有关每一列的信息:
Field
列号。
Start
列在表行中的字节位置。
Length
列的长度(以字节为单位)。
Nullpos
,Nullbit
对于可以是 的列
NULL
,MyISAM
将NULL
值存储为字节中的标志。根据有多少可为空的列,可以有一个或多个字节用于此目的。和值Nullpos
(Nullbit
如果非空)指示哪个字节和位包含指示该列是否为 的标志NULL
。用于存储
NULL
标志的位置和字节数显示在字段 1 的行中。这就是为什么该表有六Field
行,person
即使它只有五列。Type
数据类型。该值可能包含以下任何描述符:
constant
所有行都具有相同的值。
no endspace
不要储存末端空间。
no endspace, not_always
不要存储端空间,也不要对所有值进行端空间压缩。
no endspace, no empty
不要储存末端空间。不要存储空值。
table-lookup
该列已转换为
ENUM
.zerofill(
N
)值中最重要
N
的字节始终为 0,并且不会被存储。no zeros
不要存储零。
always zero
零值使用一位存储。
Huff tree
与列关联的哈夫曼树的编号。
Bits
霍夫曼树中使用的位数。
如果表已使用
myisampack压缩,则
显示Huff tree
和字段。有关此信息的示例,
请参阅第 4.6.6 节“myisampack — 生成压缩的只读 MyISAM 表” 。Bits
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输出包括以下信息:
Data records
表中的行数。
Deleted blocks
有多少已删除的块仍有保留空间。您可以优化表以最小化此空间。请参阅 第 7.6.4 节,“MyISAM 表优化”。
Key
钥匙号码。
Keyblocks used
使用了多少百分比的键块。当表刚刚用myisamchk重组时,值非常高(非常接近理论最大值)。
Packed
MySQL 尝试打包具有共同后缀的键值。这只能用于
CHAR
和VARCHAR
列的索引。对于具有相似最左边部分的长索引字符串,这可以显着减少使用的空间。在前面的示例中,第二个密钥的长度为 40 个字节,空间减少了 97%。Max levels
这个键的 B 树有多深。具有长键值的大表获得高值。
Records
表中有多少行。
M.recordlength
平均行长度。这是具有固定长度行的表的确切行长度,因为所有行都具有相同的长度。
Packed
MySQL 从字符串末尾去除空格。该
Packed
值表示通过这样做实现的节省百分比。Recordspace used
使用了多少百分比的数据文件。
Empty space
未使用的数据文件的百分比。
Blocks/Record
每行的平均块数(即,一个碎片行由多少个链接组成)。对于固定格式的表格,这始终为 1.0。该值应尽可能接近 1.0。如果它变得太大,您可以重新组织表格。请参阅第 7.6.4 节,“MyISAM 表优化”。
Recordblocks
使用了多少块(链接)。对于固定格式的表,这与行数相同。
Deleteblocks
删除了多少块(链接)。
Recorddata
使用了数据文件中的多少字节。
Deleted data
数据文件中有多少字节被删除(未使用)。
Lost space
如果一行更新为较短的长度,则会丢失一些空间。这是所有此类损失的总和,以字节为单位。
Linkdata
当使用动态表格式时,行片段用指针链接(每个 4 到 7 个字节)。
Linkdata
是所有此类指针使用的存储量的总和。