文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用 myisamchk 获取表信息

6.6.4.5 使用 myisamchk 获取表信息

要获取 MyISAM 表的描述或其统计信息,请使用此处显示的命令。本节稍后将解释这些命令的输出。

  • myisamchk -d tbl_name

    描述模式 下运行 myisamchk 以生成表的描述。如果在禁用外部锁定的情况下启动 MySQL 服务器,则 myisamchk 可能会报告在运行时更新的表的错误。但是,由于 myisamchk 不会在描述模式下更改表,因此没有破坏数据的风险。

  • myisamchk -dv tbl_name

    添加 -v 将在详细模式下运行 myisamchk,以便它生成有关该表的更多信息。再次添加 -v 将生成更多信息。

  • myisamchk -eis tbl_name

    仅显示表中最重要的信息。此操作很慢,因为它必须读取整个表。

  • myisamchk -eiv tbl_name

    这类似于 -eis,但会告诉您正在执行的操作。

tbl_name 参数可以是 MyISAM 表的名称,也可以是其索引文件的名称,如 第 6.6.4 节“myisamchk - MyISAM 表维护实用程序” 中所述。可以给出多个 tbl_name 参数。

假设名为 person 的表具有以下结构。(包含 MAX_ROWS 表选项是为了使稍后显示的 myisamchk 的示例输出中,某些值更小并且更适合输出格式。)

Press CTRL+C to copy
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;

还假设该表具有以下数据和索引文件大小

Press CTRL+C to copy
-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 输出示例

Press CTRL+C to copy
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 指的是索引文件。 Recordrow 是同义词,fieldcolumn 也是同义词。

表描述的开头部分包含以下值

  • MyISAM 文件

    MyISAM(索引)文件的名称。

  • 记录格式

    用于存储表行的格式。前面的示例使用 固定长度。其他可能的值是 压缩打包。(打包 对应于 SHOW TABLE STATUS 报告为 动态 的内容。)

  • 字符集

    表的默认字符集。

  • 文件版本

    MyISAM 格式的版本。始终为 1。

  • 创建时间

    数据文件的创建时间。

  • 恢复时间

    上次重建索引/数据文件的时间。

  • 状态

    表状态标志。可能的值为 crashedopenchangedanalyzedoptimized keyssorted 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 值的总和。

  • 索引

    键值是否可以在索引中存在多次。可能的值为 uniquemultip.(多个)。

  • 类型

    索引的这一部分具有什么数据类型。这是一种 MyISAM 数据类型,可能的值为 packedstrippedempty

  • 根索引块的地址。

  • 块大小

    每个索引块的大小。默认情况下,这是 1024,但在从源代码构建 MySQL 时,可以在编译时更改该值。

  • 记录/键

    这是优化器使用的统计值。它告诉您此索引的每个值有多少行。唯一索引的值始终为 1。这可能会在使用 myisamchk -a 加载(或大幅更改)表后更新。如果根本没有更新,则给出默认值 30。

输出的最后一部分提供有关每一列的信息

  • 字段

    列号。

  • 开始

    列在表行内的字节位置。

  • 长度

    列的长度(以字节为单位)。

  • NullposNullbit

    对于可以为 NULL 的列,MyISAMNULL 值存储为一个字节中的一个标志。根据有多少个可为空的列,可以使用一个或多个字节来实现此目的。如果 NullposNullbit 值不为空,则表示哪个字节和位包含指示该列是否为 NULL 的标志。

    用于存储 NULL 标志的位置和字节数显示在字段 1 的行中。这就是为什么 person 表有六行 Field 行,即使它只有五列。

  • 类型

    数据类型。该值可以包含以下任何描述符

    • 常量

      所有行都具有相同的值。

    • 无尾随空格

      不存储尾随空格。

    • 无尾随空格,非始终

      不存储尾随空格,并且不对所有值执行尾随空格压缩。

    • 无尾随空格,无空值

      不存储尾随空格。不存储空值。

    • 表查找

      该列已转换为 ENUM

    • 零填充(N)

      值中最左边的 N 个字节始终为 0,并且不存储。

    • 无零

      不存储零。

    • 始终为零

      零值使用一位存储。

  • 霍夫曼树

    与该列关联的霍夫曼树的编号。

  • 霍夫曼树中使用的位数。

如果表已使用 myisampack 压缩,则会显示 霍夫曼树 字段。有关此信息的示例,请参见 第 6.6.6 节“myisampack — 生成压缩的、只读的 MyISAM 表”

myisamchk -eiv 输出示例

Press CTRL+C to copy
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 尝试压缩具有公共后缀的键值。这只能用于 CHARVARCHAR 列上的索引。对于具有相似最左侧部分的长索引字符串,这可以显着减少使用的空间。在前面的示例中,第二个键长 40 个字节,并且实现了 97% 的空间减少。

  • 最大级别

    此键的 B 树的深度。具有长键值的大型表会获得较高的值。

  • 记录

    表中有多少行。

  • M.recordlength

    平均行长度。对于具有固定长度行的表,这是确切的行长度,因为所有行的长度都相同。

  • 压缩

    MySQL 会删除字符串末尾的空格。Packed 值指示通过这样做实现的节省百分比。

  • 使用的记录空间

    使用了多少百分比的数据文件。

  • 空闲空间

    数据文件中未使用的百分比。

  • 块/记录

    每行的平均块数(即,碎片行由多少个链接组成)。对于固定格式表,此值始终为 1.0。此值应尽可能保持接近 1.0。如果它变得太大,您可以重新组织表。请参见 第 9.6.4 节“MyISAM 表优化”

  • 记录块

    使用了多少个块(链接)。对于固定格式表,这与行数相同。

  • 删除块

    删除了多少个块(链接)。

  • 记录数据

    数据文件中使用了多少个字节。

  • 已删除数据

    数据文件中删除了多少个字节(未使用)。

  • 丢失的空间

    如果将行更新为较短的长度,则会丢失一些空间。这是所有此类丢失的总和,以字节为单位。

  • 链接数据

    使用动态表格式时,行片段通过指针(每个 4 到 7 个字节)链接。Linkdata 是所有此类指针使用的存储量的总和。