文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (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 範例輸出中,某些值會較小,且更容易符合輸出格式。)

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 值之總和。

  • 索引

    索引鍵值是否可以在索引中重複多次。可能的值為 uniquemultip.(多重)。

  • 類型

    索引的此部分具有的資料類型為何。這是一個 MyISAM 資料類型,可能的值為 packedstrippedempty

  • 根索引區塊的位址。

  • 區塊大小

    每個索引區塊的大小。預設值為 1024,但當 MySQL 從原始碼建置時,此值可能會在編譯時變更。

  • 記錄/鍵

    這是最佳化工具使用的統計值。它指出此索引的每個值有多少個資料列。唯一索引的值始終為 1。此值可能會在資料表載入(或大幅變更)後,使用 myisamchk -a 來更新。如果完全未更新,則會提供預設值 30。

輸出的最後一部分提供關於每個欄位的資訊

  • 欄位

    欄位編號。

  • 開始

    資料列中欄位的位元組位置。

  • 長度

    欄位的長度 (以位元組為單位)。

  • NullposNullbit

    對於可以為 NULL 的欄位,MyISAM 會將 NULL 值儲存為位元組中的旗標。根據可為 Null 的欄位數量,可能會使用一個或多個位元組來達到此目的。NullposNullbit 值(如果非空),表示哪個位元組和位元包含該旗標,以指示欄位是否為 NULL

    儲存 NULL 旗標的位置和位元組數會顯示在欄位 1 的行中。這就是為何 person 資料表有六個 Field 行,即使它只有五個欄位的原因。

  • 類型

    資料類型。此值可能包含下列任何描述符

    • 常數

      所有資料列都具有相同的值。

    • 無尾端空白

      不儲存尾端空白。

    • 無尾端空白,非總是

      不儲存尾端空白,並且不對所有值進行尾端空白壓縮。

    • 無尾端空白,無空值

      不儲存尾端空白。不儲存空值。

    • 資料表查詢

      欄位已轉換為 ENUM

    • 零填充(N)

      值中最重要的 N 個位元組始終為 0,且不儲存。

    • 無零

      不儲存零。

    • 總是為零

      零值會使用一個位元來儲存。

  • 霍夫曼樹

    與欄位關聯的霍夫曼樹編號。

  • 位元

    霍夫曼樹中使用的位元數。

如果資料表已使用 myisampack 壓縮,則會顯示 Huff treeBits 欄位。如需此資訊的範例,請參閱 第 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 會嘗試壓縮具有共同後綴的索引鍵值。這只能用於 CHARVARCHAR 欄位的索引。對於具有類似最左部分的長索引字串,這可以大幅減少使用的空間。在先前的範例中,第二個索引鍵長 40 個位元組,且空間減少了 97%。

  • 最大層級

    此索引鍵的 B 樹深度。具有長索引鍵值的大型資料表會取得較高的值。

  • 記錄

    資料表中有多少個資料列。

  • M.記錄長度

    平均資料列長度。對於具有固定長度資料列的資料表,這是確切的資料列長度,因為所有資料列都具有相同的長度。

  • 壓縮

    MySQL 會移除字串尾端的空白。Packed 值會指示藉由此操作所節省的百分比。

  • 使用的記錄空間

    已使用資料檔案的百分比。

  • 可用空間

    資料檔案中未使用的百分比。

  • 區塊/記錄

    每個資料列的平均區塊數(亦即,一個分散式資料列由多少個連結組成)。對於固定格式資料表,這始終為 1.0。此值應盡可能保持接近 1.0。如果它變得太大,您可以重新整理資料表。請參閱 第 9.6.4 節, 「MyISAM 資料表最佳化」

  • 記錄區塊

    使用的區塊(連結)數。對於固定格式資料表,這與資料列數相同。

  • 刪除區塊

    刪除的區塊(連結)數。

  • 記錄資料

    資料檔案中使用的位元組數。

  • 已刪除資料

    資料檔案中刪除(未使用)的位元組數。

  • 遺失空間

    如果資料列更新為較短的長度,則會遺失一些空間。這是所有此類損失的總和 (以位元組為單位)。

  • 連結資料

    當使用動態資料表格式時,資料列片段會以指標連結(每個指標 4 到 7 個位元組)。Linkdata 是所有這類指標所使用儲存空間的總和。