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

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