要获得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
表或它的索引文件的名称,如在第4.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.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产生 的信息类型的解释 。 “ 密钥文件”是指索引文件。 “ 记录 ”和“ 行 ”是同义词,“ 字段 ”和“ 列 ”同义。”
表格描述的最初部分包含以下值:
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
霍夫曼树中使用的位数。
该Huff tree
和Bits
如果表已经被压缩与显示领域 的myisampack。有关此信息的示例,请参见第4.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输出包含以下信息:
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
是所有这些指针使用的存储量的总和。
本文由学什么技术好网翻译