靜態格式是 MyISAM
表格的預設格式。當表格不包含可變長度欄時(VARCHAR
、VARBINARY
、BLOB
或 TEXT
),就會使用此格式。每一列都使用固定數量的位元組儲存。
在三種 MyISAM
儲存格式中,靜態格式是最簡單且最安全的(最不容易損壞)。它也是磁碟格式中最快的,因為可以輕鬆地在磁碟上的資料檔案中找到列:若要根據索引中的列編號查找列,請將列編號乘以列長度以計算列的位置。此外,掃描表格時,每次磁碟讀取操作都很容易讀取固定數量的列。
如果您的電腦在 MySQL 伺服器寫入固定格式的 MyISAM
檔案時當機,安全性就會顯現出來。在這種情況下,myisamchk 可以輕鬆判斷每一列的開始和結束位置,因此它通常可以回收除了部分寫入的列以外的所有列。MyISAM
表格索引始終可以根據資料列重建。
靜態格式表格具有以下特性
CHAR
和VARCHAR
欄會以空格填補至指定的欄寬,即使欄類型沒有變更。BINARY
和VARBINARY
欄會以0x00
位元組填補至欄寬。NULL
欄需要在列中額外的空間來記錄其值是否為NULL
。每個NULL
欄都需要額外一個位元,並向上捨入至最接近的位元組。速度非常快。
容易快取。
當機後容易重建,因為列位於固定位置。
除非您刪除了大量列,並想將可用磁碟空間返回給作業系統,否則不需要重組。若要執行此操作,請使用
OPTIMIZE TABLE
或 myisamchk -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,因為旗標儲存在動態列標頭中。