首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MyISAM 靜態(固定長度)表特性深度解析:性能、安全與空間權衡

     編輯:MySQL 綜合教學

觸發條件

表 不包含任何變長列(VARCHAR、BLOB、TEXT)時,MyISAM 自動採用靜態格式。所有行長度固定,按行號 × 行長度直接定位。

核心特性對比

維度靜態表動態/壓縮表
查找速度極快(O(1) 直接寻址)需索引或遍歷
緩存效率高(固定大小易預讀)較低
崩潰恢復簡單可靠(myisamchk 易重建)較複雜
磁盤空間通常較大(CHAR 填充、無壓縮)較小(變長、可壓縮)
重組需求極少(除非大量刪除需 OPTIMIZE TABLE)定期需整理碎片

優勢場景

  • 頻繁全表掃描的只讀/少寫表(如字典表、配置表、日誌歸檔表)
  • 對查詢延遲極度敏感、行數穩定的業務
  • 嵌入式設備、只讀介質(CD/DVD)部署

劣勢與避坑

  • CHAR(255) 實際只存 'a' 也佔 255 字節 → 濫用 CHAR 導致空間膨脹
  • 不支持 VARCHAR,業務若需變長字段須拆表或改用動態格式
  • 大量 DELETE 後不會自動回收空間,需手動 OPTIMIZE TABLE 或 myisamchk -r

轉換與檢查

-- 查看表格式
SHOW TABLE STATUS LIKE 'tbl_name'\G
-- Row_format: Fixed = 靜態, Dynamic = 動態, Compressed = 壓縮

-- 強制轉為動態格式(引入一個 VARCHAR 列即可)
ALTER TABLE tbl_name MODIFY col_name VARCHAR(255);

MySQL 5.7+ 默認存儲引擎為 InnoDB,MyISAM 靜態表多見於歷史系統或特定只讀場景。新架構優先考慮 InnoDB + 頁壓縮。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved