文件首頁
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 參考手冊  /  ...  /  靜態(固定長度)表格特性

18.2.3.1 靜態(固定長度)表格特性

靜態格式是 MyISAM 表格的預設格式。當表格不包含可變長度欄時(VARCHARVARBINARYBLOBTEXT),就會使用此格式。每一列都使用固定數量的位元組儲存。

在三種 MyISAM 儲存格式中,靜態格式是最簡單且最安全的(最不容易損壞)。它也是磁碟格式中最快的,因為可以輕鬆地在磁碟上的資料檔案中找到列:若要根據索引中的列編號查找列,請將列編號乘以列長度以計算列的位置。此外,掃描表格時,每次磁碟讀取操作都很容易讀取固定數量的列。

如果您的電腦在 MySQL 伺服器寫入固定格式的 MyISAM 檔案時當機,安全性就會顯現出來。在這種情況下,myisamchk 可以輕鬆判斷每一列的開始和結束位置,因此它通常可以回收除了部分寫入的列以外的所有列。MyISAM 表格索引始終可以根據資料列重建。

注意

固定長度列格式僅適用於沒有 BLOBTEXT 欄的表格。使用明確的 ROW_FORMAT 子句建立具有此類欄的表格不會引發錯誤或警告;會忽略格式規格。

靜態格式表格具有以下特性

  • CHARVARCHAR 欄會以空格填補至指定的欄寬,即使欄類型沒有變更。BINARYVARBINARY 欄會以 0x00 位元組填補至欄寬。

  • NULL 欄需要在列中額外的空間來記錄其值是否為 NULL。每個 NULL 欄都需要額外一個位元,並向上捨入至最接近的位元組。

  • 速度非常快。

  • 容易快取。

  • 當機後容易重建,因為列位於固定位置。

  • 除非您刪除了大量列,並想將可用磁碟空間返回給作業系統,否則不需要重組。若要執行此操作,請使用 OPTIMIZE TABLEmyisamchk -r

  • 通常比動態格式表格需要更多磁碟空間。

  • 使用以下運算式計算靜態大小列的預期列長度(以位元組為單位)

    row length = 1
                 + (sum of column lengths)
                 + (number of NULL columns + delete_flag + 7)/8
                 + (number of variable-length columns)

    delete_flag 對於具有靜態列格式的表格為 1。靜態表格在列記錄中使用一個位元作為旗標,指示列是否已刪除。delete_flag 對於動態表格為 0,因為旗標儲存在動態列標頭中。