文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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 參考手冊  /  其他儲存引擎  /  MyISAM 儲存引擎

18.2 MyISAM 儲存引擎

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 8.4 中,通常需要使用 ENGINE 來指定 MyISAM 儲存引擎,因為 InnoDB 是預設引擎。

您可以使用 mysqlcheck 用戶端或 myisamchk 工具來檢查或修復 MyISAM 資料表。您也可以使用 myisampack 來壓縮 MyISAM 資料表,以減少佔用的空間。請參閱章節 6.5.3,「mysqlcheck — 資料表維護程式」章節 6.6.4,「myisamchk — MyISAM 資料表維護工具」章節 6.6.6,「myisampack — 產生壓縮的唯讀 MyISAM 資料表」

在 MySQL 8.4 中,MyISAM 儲存引擎不提供分割支援。在先前版本的 MySQL 中建立的分割 MyISAM 資料表無法在 MySQL 8.4 中使用。如需更多資訊,請參閱章節 26.6.2,「與儲存引擎相關的分割限制」。如需有關升級這些資料表以便在 MySQL 8.4 中使用的幫助,請參閱章節 3.5,「MySQL 8.4 中的變更」

MyISAM 資料表具有以下特性

  • 所有資料值都以低位元組優先的方式儲存。這使得資料與機器和作業系統無關。二進位可移植性的唯一要求是機器使用二補數有符號整數和 IEEE 浮點格式。這些要求在主流機器中廣泛使用。二進位相容性可能不適用於嵌入式系統,這些系統有時會有特殊的處理器。

    以低位元組優先的方式儲存資料沒有顯著的速度損失;資料表列中的位元組通常是不對齊的,並且以相反順序讀取未對齊的位元組僅需少量額外處理。此外,與其他程式碼相比,伺服器中擷取欄位值的程式碼並非時間關鍵。

  • 所有數值索引鍵值都以高位元組優先的方式儲存,以允許更好的索引壓縮。

  • 在支援大型檔案的檔案系統和作業系統上支援大型檔案 (最大到 63 位元的檔案長度)。

  • 一個 MyISAM 資料表中限制為 (232)2 (1.844E+19) 列。

  • 每個 MyISAM 資料表的最大索引數為 64。

    每個索引的最大欄數為 16。

  • 最大索引鍵長度為 1000 個位元組。這也可以透過變更原始碼並重新編譯來變更。對於大於 250 個位元組的索引鍵,將使用大於預設值 1024 個位元組的較大索引鍵區塊大小。

  • 當以排序順序插入列時 (例如當您使用 AUTO_INCREMENT 欄時),索引樹會分割,使高節點僅包含一個索引鍵。這改善了索引樹中的空間利用率。

  • 支援每個資料表內部處理一個 AUTO_INCREMENT 欄。MyISAM 會自動更新 INSERTUPDATE 操作的此欄。這使得 AUTO_INCREMENT 欄更快(至少快 10%)。在刪除後,不會重複使用序列頂端的值。(當 AUTO_INCREMENT 欄定義為多欄索引的最後一欄時,確實會重複使用從序列頂端刪除的值。)可以使用 ALTER TABLEmyisamchk 重設 AUTO_INCREMENT 值。

  • 當混合使用刪除、更新和插入時,動態大小的列的片段化程度要小得多。這是透過自動組合相鄰的已刪除區塊,以及在下一個區塊被刪除時延伸區塊來完成的。

  • MyISAM 支援並行插入:如果資料表在資料檔的中間沒有可用區塊,您可以在其他執行緒從該資料表讀取資料的同時,使用 INSERT 陳述式將新列插入其中。可用區塊可能會因刪除列或更新動態長度的列(內容比目前內容多)而產生。當所有可用區塊都被用完(填滿)時,後續的插入會再次變成並行插入。請參閱 第 10.11.3 節,「並行插入」

  • 您可以將資料檔和索引檔放在不同實體裝置上的不同目錄中,以使用 CREATE TABLE 陳述式的 DATA DIRECTORYINDEX DIRECTORY 資料表選項來獲得更快的速度。請參閱 第 15.1.20 節,「CREATE TABLE 陳述式」

  • BLOBTEXT 資料行可以建立索引。

  • 索引資料行中允許使用 NULL 值。每個鍵需要 0 到 1 個位元組。

  • 每個字元資料行都可以有不同的字元集。請參閱 第 12 章,「字元集、校對、Unicode」

  • MyISAM 索引檔案中有一個旗標,指出資料表是否已正確關閉。如果使用設定了 myisam_recover_options 系統變數來啟動 mysqld,則會在開啟時自動檢查 MyISAM 資料表,如果資料表未正確關閉,則會修復資料表。

  • 如果您使用 --update-state 選項執行 myisamchk,則會將資料表標記為已檢查。myisamchk --fast 只會檢查沒有這個標記的資料表。

  • myisamchk --analyze 會儲存部分鍵以及完整鍵的統計資訊。

  • myisampack 可以壓縮 BLOBVARCHAR 資料行。

MyISAM 還支援下列功能

  • 支援真正的 VARCHAR 類型;VARCHAR 資料行開頭有一個以一或兩個位元組儲存的長度。

  • 具有 VARCHAR 資料行的資料表可能具有固定或動態的列長度。

  • 資料表中 VARCHARCHAR 資料行的長度總和可能高達 64KB。

  • 任意長度的 UNIQUE 限制。

其他資源