InnoDB 儲存引擎與 MyISAM 有著本質的不同,特別是在資料儲存架構上。要透徹理解 InnoDB,首先必須搞清楚兩個核心概念:共享表空間與獨享表空間。這兩種模式決定了資料與索引如何組織在磁碟上,進而影響效能、維護彈性與空間回收機制。
共享表空間是指某一資料庫下的所有表資料、索引檔案全部集中存放在單一檔案(或多個檔案組成的邏輯整體)中。預設情況下,該檔案位於 data 目錄,名為 ibdata1,初始大小 10 MB,支援自動擴展。
獨享表空間則是每張表獨立擁有自己的儲存檔案。每張表會產生一個 .frm 表結構描述檔與一個 .ibd 資料檔,後者包含該表的所有資料與索引。預設儲存位置同樣在對應的資料庫目錄下。
在設定檔 my.cnf 中啟用:innodb_file_per_table = 1
DROP TABLE 立即釋放空間;大量刪除後可用 ALTER TABLE tbl_name ENGINE=InnoDB 或 TRUNCATE TABLE(需 InnoDB Plugin)收縮檔案。綜合來看,獨享表空間在效能與維護彈性上更佔優勢,建議生產環境預設開啟。
核心參數為 innodb_file_per_table:
ON (1):啟用獨享表空間(MySQL 5.6+ 預設)OFF (0):使用共享表空間注意:參數修改僅對「新建表」生效,既有表不會自動遷移。若需遷移既有表,需手動執行 ALTER TABLE tbl_name ENGINE=InnoDB 重建。
innodb_data_home_dir = "C:\mysql\data\"
innodb_log_group_home_dir = "C:\mysql\data\"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_file_per_table = 1
參數說明:
innodb_data_home_dir:資料檔案根目錄innodb_log_group_home_dir:Redo Log 目錄innodb_data_file_path:共享表空間初始檔案規格(仍需存在,存放 Undo Log 等元資料)innodb_file_per_table:啟用獨享表空間關鍵提醒:InnoDB 不會自動建立目錄,啟動服務前務必確認路徑已存在。若 innodb_data_home_dir 未設定,預設為 ./(即 MySQL 資料目錄)。資料遷移備份時,務必保證所有相關檔案完整性。