靜態格式是 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,因為該旗標儲存在動態列標頭中。