若要取得 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
(索引)檔案的名稱。記錄格式
用於儲存表格資料列的格式。先前的範例使用
固定長度
。其他可能的值為已壓縮
和已封裝
。(已封裝
對應於SHOW TABLE STATUS
報告為動態
的內容。)字元集
表格的預設字元集。
檔案版本
MyISAM
格式的版本。一律為 1。建立時間
資料檔案建立的時間。
復原時間
上次重建索引/資料檔案的時間。
狀態
表格狀態旗標。可能的值為
已損毀
、開啟
、已變更
、已分析
、已最佳化索引鍵
和已排序的索引頁面
。自動遞增索引鍵
、最後值
與表格的
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
值儲存為位元組中的旗標。根據可為 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 樹深度。具有長索引鍵值的大型資料表會取得較高的值。
記錄
資料表中有多少個資料列。
M.記錄長度
平均資料列長度。對於具有固定長度資料列的資料表,這是確切的資料列長度,因為所有資料列都具有相同的長度。
壓縮
MySQL 會移除字串尾端的空白。
Packed
值會指示藉由此操作所節省的百分比。使用的記錄空間
已使用資料檔案的百分比。
可用空間
資料檔案中未使用的百分比。
區塊/記錄
每個資料列的平均區塊數(亦即,一個分散式資料列由多少個連結組成)。對於固定格式資料表,這始終為 1.0。此值應盡可能保持接近 1.0。如果它變得太大,您可以重新整理資料表。請參閱 第 9.6.4 節, 「MyISAM 資料表最佳化」。
記錄區塊
使用的區塊(連結)數。對於固定格式資料表,這與資料列數相同。
刪除區塊
刪除的區塊(連結)數。
記錄資料
資料檔案中使用的位元組數。
已刪除資料
資料檔案中刪除(未使用)的位元組數。
遺失空間
如果資料列更新為較短的長度,則會遺失一些空間。這是所有此類損失的總和 (以位元組為單位)。
連結資料
當使用動態資料表格式時,資料列片段會以指標連結(每個指標 4 到 7 個位元組)。
Linkdata
是所有這類指標所使用儲存空間的總和。