本節說明 InnoDB
資料表、索引、表空間以及 InnoDB
儲存引擎其他方面的限制。
一個資料表最多可以包含 1017 個欄位。虛擬產生欄位也包含在此限制內。
一個資料表最多可以包含 64 個次要索引。
對於使用
DYNAMIC
或COMPRESSED
列格式的InnoDB
資料表,索引鍵字首長度限制為 3072 個位元組。對於使用
REDUNDANT
或COMPACT
列格式的InnoDB
資料表,索引鍵字首長度限制為 767 個位元組。例如,假設字元集為utf8mb4
,且每個字元最多 4 個位元組,則TEXT
或VARCHAR
欄位上超過 191 個字元的欄位字首索引可能會達到此限制。嘗試使用超過限制的索引鍵字首長度會傳回錯誤。
如果您在建立 MySQL 執行個體時,透過指定
innodb_page_size
選項,將InnoDB
頁面大小縮小為 8KB 或 4KB,則索引鍵的最大長度將根據 16KB 頁面大小的 3072 個位元組限制按比例降低。也就是說,當頁面大小為 8KB 時,索引鍵的最大長度為 1536 個位元組,而當頁面大小為 4KB 時,索引鍵的最大長度為 768 個位元組。適用於索引鍵字首的限制也適用於完整欄位索引鍵。
多欄索引最多允許 16 個欄位。超出限制會傳回錯誤。
ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
最大行大小(不包括任何儲存在頁面外的變長欄)略小於 4KB、8KB、16KB 和 32KB 頁面大小的一半。例如,預設
innodb_page_size
為 16KB 時,最大行大小約為 8000 位元組。但是,對於 64KB 的InnoDB
頁面大小,最大行大小約為 16000 位元組。LONGBLOB
和LONGTEXT
欄的大小必須小於 4GB,並且包括BLOB
和TEXT
欄在內的總行大小必須小於 4GB。如果行長度小於頁面的一半,則所有內容都會在本頁面內儲存。如果超過頁面的一半,則會選擇變長欄進行外部頁面外儲存,直到行適合頁面的一半大小,如第 17.11.2 節「檔案空間管理」中所述。
儘管
InnoDB
內部支援大於 65,535 位元組的行大小,但 MySQL 本身對所有欄的總大小施加了 65,535 的行大小限制。請參閱第 10.4.7 節「表格欄計數和行大小限制」。最大表格或表格空間大小會受到伺服器檔案系統的影響,這可能會施加小於
InnoDB
定義的內部 64 TiB 大小限制的最大檔案大小。例如,Linux 上的 ext4 檔案系統的最大檔案大小為 16 TiB,因此最大表格或表格空間大小會變為 16 TiB 而不是 64 TiB。另一個例子是 FAT32 檔案系統,其最大檔案大小為 4 GB。如果需要更大的系統表格空間,請使用多個較小的資料檔案而不是一個大的資料檔案來配置它,或者將表格資料分散到每個表格的檔案和一般表格空間資料檔案中。
InnoDB
日誌檔案的組合最大大小為 512GB。最小表格空間大小略大於 10MB。最大表格空間大小取決於
InnoDB
頁面大小。最大表格空間大小也是表格的最大大小。
一個
InnoDB
實例最多支援 2^32 (4294967296) 個表格空間,其中少數表格空間保留給復原和暫存表格。共用表格空間最多支援 2^32 (4294967296) 個表格。
表格空間檔案的路徑(包括檔案名稱)不能超過 Windows 上的
MAX_PATH
限制。在 Windows 10 之前,MAX_PATH
限制為 260 個字元。自 Windows 10 版本 1607 起,MAX_PATH
限制已從常見的 Win32 檔案和目錄函數中移除,但您必須啟用新行為。有關與並行讀寫交易相關的限制,請參閱第 17.6.6 節「復原日誌」。