掌握資料庫的「硬邊界」是架構設計、容量規劃與故障排查的基石。本文彙整 MySQL 5.6 官方文檔與工程實踐,系統梳理 SQL Join 深度、資料庫/表體量、表列數與行大小、InnoDB 表空間上限等關鍵限制,並附帶常見作業系統檔案大小限制對照表,供快速查閱。
SELECT、VIEW 定義中可引用的基礎表/視圖總數不得超過 61。超限將報錯 ERROR 1116 (HY000): Too many tables; MySQL can only use 61 tables in a join。MyISAM 以 .MYD 檔案存儲數據,InnoDB 預設亦以 .ibd(innodb_file_per_table=ON)或共享表空間 ibdata* 形式落盤,故受限於 OS 檔案系統:
| 作業系統 / 檔案系統 | 單檔案大小上限 |
|---|---|
| Win32 FAT/FAT32 | 2 GB / 4 GB |
| Win32 NTFS | 2 TB(可能更大) |
| Linux 2.2 (Intel 32-bit) | 2 GB (LFS 啟用後 4 GB) |
| Linux 2.4+ (ext3) | 4 TB |
| Solaris 9/10 | 16 TB |
| macOS HFS+ | 2 TB |
innodb_file_per_table、OS/FS 支援、innodb_page_size 默認 16 KB)。擴容指引:參考官方手冊 Section 14.4.2 “Changing the Number or Size of InnoDB Log Files”;實際操作需停機、備份、修改 innodb_log_file_size、重啟。
| 項目 | MySQL 5.6 限制 | 備註 |
|---|---|---|
| 單表最大列數 | 4,096 | 含虛擬生成列 |
| InnoDB 最大列數 | 1,000 | 引擎層面更嚴格 |
| 單行最大長度 | 65,535 bytes | 不含 BLOB/TEXT/VARCHAR/VARBINARY 溢位頁數據 |
| InnoDB 單行實際上限 | ≈ 8,000 bytes(半頁) | 不含大字段;超過將強制溢位 |
| InnoDB 最大表數 | 40 億 | 自 5.5 起支援 |
JOIN 深度、行長度是否超標。-- 查看目前資料庫目錄大小
SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024/1024,2) AS size_GB
FROM information_schema.tables GROUP BY table_schema;
-- 查看單表行格式與平均行長
SHOW TABLE STATUS LIKE 'your_table'\G