文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使用 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(索引)檔案的名稱。

  • 記錄格式

    用於儲存表格列的格式。先前的範例使用 Fixed length。其他可能的值為 CompressedPacked。(Packed 對應到 SHOW TABLE STATUS 回報為 Dynamic 的值。)

  • 字元集

    表格預設字元集。

  • 檔案版本

    MyISAM 格式的版本。永遠是 1。

  • 建立時間

    建立資料檔的時間。

  • 復原時間

    上次重建索引/資料檔的時間。

  • 狀態

    表格狀態旗標。可能的值為 crashedopenchangedanalyzedoptimized keyssorted index pages

  • Auto increment keyLast 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 值的總和。

  • 索引

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

  • 類型

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

  • 根索引區塊的位址。

  • 區塊大小

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

  • 記錄/鍵

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

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

  • 欄位

    欄位編號。

  • 開始

    欄位在表格列中的位元組位置。

  • 長度

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

  • Nullpos, Nullbit

    對於可以為 NULL 的欄位,MyISAM 會將 NULL 值儲存為位元組中的旗標。根據有多少個可為 Null 的欄位,可能會有一個或多個位元組用於此目的。NullposNullbit 值(如果非空)表示哪個位元組和位元包含該旗標,以指示欄位是否為 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 會嘗試壓縮具有共同尾碼的鍵值。這只能用於 CHARVARCHAR 欄位上的索引。對於具有相似最左部分的長索引字串,這可以大幅減少使用的空間。在前面的範例中,第二個鍵長 40 位元組,且空間減少了 97%。

  • 最大層級

    此鍵的 B 樹有多深。具有長鍵值的大型表格會取得較高的值。

  • 記錄

    表格中有多少列。

  • M.記錄長度

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

  • 已壓縮

    MySQL 會從字串結尾刪除空格。Packed 值表示執行此操作所達成的節省百分比。

  • 使用的記錄空間

    使用了多少百分比的資料檔案。

  • 空白空間

    有多少百分比的資料檔案未使用。

  • 區塊/記錄

    每列的平均區塊數(也就是,一個分散的列由多少個連結組成)。對於固定格式的表格,這永遠是 1.0。此值應盡可能保持接近 1.0。如果太大,您可以重新組織表格。請參閱 第 9.6.4 節「MyISAM 表格最佳化」

  • 記錄區塊

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

  • 刪除區塊

    刪除了多少個區塊(連結)。

  • 記錄資料

    使用了資料檔案中的多少個位元組。

  • 已刪除資料

    刪除(未使用)了資料檔案中的多少個位元組。

  • 遺失空間

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

  • 連結資料

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