MyISAM
基於較舊(且不再可用)的 ISAM
儲存引擎,但具有許多有用的擴充功能。
表 18.2 MyISAM 儲存引擎功能
功能 | 支援 |
---|---|
B 樹索引 | 是 |
備份/時間點復原 (實作於伺服器中,而非儲存引擎中。) | 是 |
叢集資料庫支援 | 否 |
叢集索引 | 否 |
壓縮資料 | 是 (僅在使用壓縮列格式時才支援壓縮的 MyISAM 表格。使用 MyISAM 壓縮列格式的表格為唯讀。) |
資料快取 | 否 |
加密資料 | 是 (透過伺服器中的加密函數實作。) |
外部索引鍵支援 | 否 |
全文檢索索引 | 是 |
地理空間資料類型支援 | 是 |
地理空間索引支援 | 是 |
雜湊索引 | 否 |
索引快取 | 是 |
鎖定粒度 | 表格 |
MVCC | 否 |
複製支援 (實作於伺服器中,而非儲存引擎中。) | 是 |
儲存限制 | 256TB |
T 樹索引 | 否 |
交易 | 否 |
更新資料字典的統計資料 | 是 |
每個 MyISAM
表格都以兩個檔案的形式儲存在磁碟上。檔案名稱以表格名稱開頭,並具有指示檔案類型的副檔名。資料檔案的副檔名為 .MYD
(MYData
)。索引檔案的副檔名為 .MYI
(MYIndex
)。表格定義儲存在 MySQL 資料字典中。
若要明確指定您要使用 MyISAM
表格,請使用 ENGINE
表格選項來表示。
CREATE TABLE t (i INT) ENGINE = MYISAM;
在 MySQL 9.0 中,通常需要使用 ENGINE
來指定 MyISAM
儲存引擎,因為 InnoDB
是預設引擎。
您可以使用 mysqlcheck 用戶端或 myisamchk 公用程式來檢查或修復 MyISAM
表格。您也可以使用 myisampack 來壓縮 MyISAM
表格,以大幅減少空間佔用。請參閱 第 6.5.3 節,「mysqlcheck — 表格維護程式」、第 6.6.4 節,「myisamchk — MyISAM 表格維護工具」和 第 6.6.6 節,「myisampack — 產生壓縮、唯讀的 MyISAM 表格」。
在 MySQL 9.0 中,MyISAM
儲存引擎不提供分割區支援。在舊版 MySQL 中建立的分割 MyISAM
表格無法在 MySQL 9.0 中使用。如需詳細資訊,請參閱 第 26.6.2 節,「與儲存引擎相關的分割區限制」。如需升級這類表格以使其能在 MySQL 9.0 中使用的協助,請參閱 第 3.5 節,「MySQL 9.0 中的變更」。
MyISAM
表格具有下列特性
所有資料值都以最低位元組優先的方式儲存。這使資料與機器和作業系統無關。二進制可攜性的唯一要求是機器使用二補數帶正負號的整數和 IEEE 浮點格式。這些要求在主流機器中廣泛使用。二進制相容性可能不適用於嵌入式系統,這些系統有時具有特殊的處理器。
以最低位元組優先的方式儲存資料沒有明顯的速度損失;表格列中的位元組通常不對齊,以正常順序讀取未對齊的位元組所需的處理量僅比以反向順序讀取多一點點。此外,與其他程式碼相比,伺服器中擷取欄位值的程式碼並非時間關鍵。
所有數值索引鍵值都以最高位元組優先的方式儲存,以允許更好的索引壓縮。
在支援大檔案的檔案系統和作業系統上,支援大型檔案(最多 63 位元檔案長度)。
在
MyISAM
表格中,行數限制為 (232)2 (1.844E+19)。每個
MyISAM
表格的最大索引數為 64。每個索引的最大欄數為 16。
最大索引鍵長度為 1000 個位元組。這也可以透過變更原始碼並重新編譯來變更。對於索引鍵長度超過 250 個位元組的情況,會使用大於預設值 1024 個位元組的索引鍵區塊大小。
當行依排序順序插入時(例如當您使用
AUTO_INCREMENT
欄位時),索引樹會分割,使高節點只包含一個索引鍵。這可改善索引樹中的空間利用率。支援每個表格內部處理一個
AUTO_INCREMENT
欄位。MyISAM
會自動為INSERT
和UPDATE
操作更新此欄位。這使得AUTO_INCREMENT
欄位更快(至少快 10%)。序列頂端的值在刪除後不會重複使用。(當AUTO_INCREMENT
欄位定義為多欄索引的最後一欄時,會發生重複使用從序列頂端刪除的值。)可以使用ALTER TABLE
或 myisamchk 來重設AUTO_INCREMENT
值。當混合刪除、更新和插入時,動態大小的行比較不會分散。這是透過自動合併相鄰的已刪除區塊,以及在下一個區塊已刪除時擴充區塊來完成的。
MyISAM
支援並行插入:如果表格的資料檔案中間沒有可用區塊,您可以在其他執行緒從表格讀取資料的同時,將新行INSERT
到表格中。可用區塊可能是因為刪除行或更新長度動態的行時,新資料比目前內容多而產生。當所有可用區塊都用完(填滿)時,未來的插入會再次變成並行。請參閱 第 10.11.3 節,「並行插入」。您可以使用
CREATE TABLE
的DATA DIRECTORY
和INDEX DIRECTORY
表格選項,將資料檔案和索引檔案放在不同實體裝置上的不同目錄中,以獲得更高的速度。請參閱 第 15.1.20 節,「CREATE TABLE 陳述式」。索引欄位中允許使用
NULL
值。每個索引鍵需要 0 到 1 個位元組。每個字元欄位都可以有不同的字元集。請參閱 第 12 章,字元集、校對、Unicode。
在
MyISAM
索引檔案中,有一個旗標會指示資料表是否已正確關閉。如果以設定myisam_recover_options
系統變數的方式啟動 mysqld,則開啟時會自動檢查MyISAM
資料表,如果資料表未正確關閉,則會進行修復。如果您使用
--update-state
選項執行 myisamchk,則會將資料表標示為已檢查。myisamchk --fast 只會檢查沒有此標記的資料表。myisamchk --analyze 會儲存部分索引鍵以及整個索引鍵的統計資料。
myisampack 可以壓縮
BLOB
和VARCHAR
資料行。
MyISAM
也支援以下功能:
其他資源
在 https://forums.mysql.com/list.php?21 上有一個專門討論
MyISAM
儲存引擎的論壇。