前言
MySQL 單表大小上限不由 MySQL 決定,而由作業系統檔案系統決定。本文詳述 MyISAM、InnoDB 兩大主流引擎的理論上限與實際限制因素。
歷史演進
| 版本 | 引擎 | 單表上限 |
| MySQL 3.22 | ISAM | 4 GB |
| MySQL 3.23+ | MyISAM | 64 PB (2^64 bytes) |
| InnoDB 共享表空間 | InnoDB | 64 TB (表空間上限) |
| InnoDB 獨立表空間 | InnoDB | 受限於檔案系統單檔上限 |
引擎詳解
MyISAM
- 理論上限 64 PB,實際受限於檔案系統單檔大小(
.MYD、.MYI)。
- 預設建表上限 4 GB,需指定
AVG_ROW_LENGTH、MAX_ROWS 突破:
CREATE TABLE t (...)
AVG_ROW_LENGTH=1000 MAX_ROWS=1000000000
ENGINE=MyISAM;
- 事後調整:
ALTER TABLE t MAX_ROWS=2000000000 AVG_ROW_LENGTH=1000;
InnoDB 共享表空間
- 所有資料集中於
ibdata1、ibdata2... 共享表空間。
- 單表可跨多檔,不受單檔限制,上限為表空間 64 TB。
InnoDB 獨立表空間 (innodb_file_per_table=ON)
- 每表獨立
.ibd 檔案,再次受限於檔案系統單檔上限。
主流作業系統檔案大小上限
| 作業系統 / 檔案系統 | 單檔上限 |
| Windows FAT32 | 4 GB |
| Windows NTFS | 2 TB (理論 16 EB) |
| Linux ext2/3 (32-bit) | 2 GB (LFS 4 GB) |
| Linux ext4 / XFS (64-bit) | 16 TB ~ 1 EB |
| Solaris 9/10 (ZFS/UFS) | 16 TB |
| NetWare NSS | 8 TB |
| macOS HFS+ / APFS | 2 TB / 8 EB |
官方建議
- Windows 生產環境必須使用 NTFS,FAT/VFAT 不適合。
- 大表規劃前確認檔案系統支援度。
- InnoDB 推薦啟用
innodb_file_per_table 便於管理與備份。
相關延伸閱讀
- MySQL 原始碼套件安裝方法
- MySQL 建立關聯表方法
- MySQL 建表實例
- MySQL 日期格式轉換函數
- MySQL 查詢漢字拼音首字母