若要取得 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.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 檔案
MyISAM
(索引)檔案的名稱。記錄格式
用於儲存表格列的格式。先前的範例使用
Fixed length
。其他可能的值為Compressed
和Packed
。(Packed
對應到SHOW TABLE STATUS
回報為Dynamic
的值。)字元集
表格預設字元集。
檔案版本
MyISAM
格式的版本。永遠是 1。建立時間
建立資料檔的時間。
復原時間
上次重建索引/資料檔的時間。
狀態
表格狀態旗標。可能的值為
crashed
、open
、changed
、analyzed
、optimized keys
和sorted index pages
。Auto increment key
、Last value
與表格
AUTO_INCREMENT
欄位相關聯的金鑰編號,以及此欄位的最近產生值。如果沒有這類欄位,則不會顯示這些欄位。資料記錄
表格中的列數。
已刪除區塊
有多少已刪除的區塊仍然保留空間。您可以最佳化表格以最小化此空間。請參閱 第 9.6.4 節「MyISAM 表格最佳化」。
資料檔案部分
對於動態列格式,這表示有多少資料區塊。對於沒有分散列的最佳化表格,這與
Data records
相同。已刪除資料
有多少位元組的未回收已刪除資料。您可以最佳化表格以最小化此空間。請參閱 第 9.6.4 節「MyISAM 表格最佳化」。
資料檔案指標
資料檔案指標的大小(以位元組為單位)。它通常是 2、3、4 或 5 個位元組。大多數表格以 2 個位元組管理,但目前無法從 MySQL 控制。對於固定表格,這是列位址。對於動態表格,這是位元組位址。
金鑰檔指標
索引檔案指標的大小(以位元組為單位)。它通常是 1、2 或 3 個位元組。大多數表格以 2 個位元組管理,但這會由 MySQL 自動計算。它永遠是區塊位址。
最大資料檔案長度
表格資料檔案可以達到的最大長度(以位元組為單位)。
最大金鑰檔長度
表格索引檔案可以達到的最大長度(以位元組為單位)。
記錄長度
每列佔用的空間大小(以位元組為單位)。
輸出的 table description
部分包含表格中所有金鑰的清單。對於每個金鑰,myisamchk 會顯示一些低階資訊
金鑰
此金鑰的編號。此值僅針對金鑰的第一欄顯示。如果此值遺失,則該行對應於多欄金鑰的第二欄或後續欄。對於範例中顯示的表格,第二個索引有兩行
table description
。這表示它是具有兩個部分的多部分索引。開始
索引的此部分在列中的起始位置。
長度
索引的這部分長度。對於壓縮的數字,這應該永遠是欄位的完整長度。對於字串,它可能比索引欄位的完整長度短,因為您可以為字串欄位的前綴建立索引。多部分鍵的總長度是所有鍵部分
Len
值的總和。索引
索引中一個鍵值是否可以多次存在。可能的值為
unique
或multip.
(多次)。類型
索引的這部分具有何種資料類型。這是一個
MyISAM
資料類型,可能的值為packed
、stripped
或empty
。根
根索引區塊的位址。
區塊大小
每個索引區塊的大小。預設值為 1024,但當從原始碼建置 MySQL 時,可以在編譯時變更此值。
記錄/鍵
這是最佳化器使用的統計值。它表示此索引的每個值有多少列。唯一索引的值始終為 1。可以在載入表格(或大幅變更)後使用 myisamchk -a 更新此值。如果完全不更新,則會提供預設值 30。
輸出的最後一部分提供有關每個欄位的資訊
欄位
欄位編號。
開始
欄位在表格列中的位元組位置。
長度
欄位的長度(以位元組為單位)。
Nullpos
,Nullbit
對於可以為
NULL
的欄位,MyISAM
會將NULL
值儲存為位元組中的旗標。根據有多少個可為 Null 的欄位,可能會有一個或多個位元組用於此目的。Nullpos
和Nullbit
值(如果非空)表示哪個位元組和位元包含該旗標,以指示欄位是否為NULL
。用於儲存
NULL
旗標的位置和位元組數會顯示在欄位 1 的行中。這就是為什麼person
表格有六個欄位
行,即使它只有五個欄位的原因。類型
資料類型。該值可能包含以下任何描述符
常數
所有列都有相同的值。
無尾隨空白
不儲存尾隨空白。
無尾隨空白,非永遠
不儲存尾隨空白,且不對所有值進行尾隨空白壓縮。
無尾隨空白,無空值
不儲存尾隨空白。不儲存空值。
表格查閱
欄位已轉換為
ENUM
。zerofill(
N
)該值中最重要的
N
個位元組永遠為 0,且不會儲存。無零
不儲存零。
永遠為零
零值使用一個位元儲存。
霍夫曼樹
與欄位關聯的霍夫曼樹的編號。
位元
在霍夫曼樹中使用的位元數。
如果表格已使用 myisampack 壓縮,則會顯示 霍夫曼樹
和 位元
欄位。有關此資訊的範例,請參閱 第 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 樹有多深。具有長鍵值的大型表格會取得較高的值。
記錄
表格中有多少列。
M.記錄長度
平均列長度。對於具有固定長度列的表格,這是精確的列長度,因為所有列都具有相同的長度。
已壓縮
MySQL 會從字串結尾刪除空格。
Packed
值表示執行此操作所達成的節省百分比。使用的記錄空間
使用了多少百分比的資料檔案。
空白空間
有多少百分比的資料檔案未使用。
區塊/記錄
每列的平均區塊數(也就是,一個分散的列由多少個連結組成)。對於固定格式的表格,這永遠是 1.0。此值應盡可能保持接近 1.0。如果太大,您可以重新組織表格。請參閱 第 9.6.4 節「MyISAM 表格最佳化」。
記錄區塊
使用了多少個區塊(連結)。對於固定格式的表格,這與列數相同。
刪除區塊
刪除了多少個區塊(連結)。
記錄資料
使用了資料檔案中的多少個位元組。
已刪除資料
刪除(未使用)了資料檔案中的多少個位元組。
遺失空間
如果將列更新為較短的長度,則會遺失一些空間。這是所有此類遺失的總和,以位元組為單位。
連結資料
當使用動態表格格式時,列片段會與指標(每個 4 到 7 個位元組)連結。
連結資料
是所有此類指標使用的儲存量總和。