MySQL 資料庫的有效最大表格大小通常取決於作業系統對檔案大小的限制,而不是 MySQL 內部限制。有關作業系統檔案大小限制的最新資訊,請參閱作業系統的特定文件。
Windows 使用者請注意,FAT 和 VFAT (FAT32) 不 適合用於 MySQL 的生產環境。請改用 NTFS。
如果您遇到全表格錯誤,可能有以下幾個原因:
磁碟可能已滿。
您正在使用
InnoDB
表格,並且InnoDB
表格空間檔案中的空間已用完。最大表格空間大小也是表格的最大大小。有關表格空間大小限制,請參閱第 17.21 節「InnoDB 限制」。通常,對於大於 1TB 的表格,建議將表格分割成多個表格空間檔案。
您已達到作業系統檔案大小限制。例如,您正在使用
MyISAM
表格,而作業系統僅支援最大 2GB 的檔案大小,並且您已達到資料檔案或索引檔案的此限制。您正在使用
MyISAM
表格,而表格所需的空間超出了內部指標大小所允許的範圍。MyISAM
預設允許資料和索引檔案增長到 256TB,但此限制可以更改為最大允許大小 65,536TB (2567 − 1 位元組)。如果您的
MyISAM
表格需要大於預設限制,並且您的作業系統支援大型檔案,則CREATE TABLE
陳述式支援AVG_ROW_LENGTH
和MAX_ROWS
選項。請參閱第 15.1.20 節「CREATE TABLE 陳述式」。伺服器使用這些選項來決定允許表格的大小。如果指標大小對於現有表格來說太小,您可以使用
ALTER TABLE
更改選項,以增加表格的最大允許大小。請參閱第 15.1.9 節「ALTER TABLE 陳述式」。ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
只有在表格包含
BLOB
或TEXT
資料行時,才需要指定AVG_ROW_LENGTH
。在這種情況下,MySQL 無法僅根據資料列的數量來最佳化所需的空間。若要變更
MyISAM
表格的預設大小限制,請設定myisam_data_pointer_size
,此變數會設定內部資料列指標所使用的位元組數。如果您未指定MAX_ROWS
選項,則此值會用於設定新表格的指標大小。myisam_data_pointer_size
的值可以在 2 到 7 之間。例如,對於使用動態儲存格式的表格,值為 4 時允許表格最大達到 4GB;值為 6 時允許表格最大達到 256TB。使用固定儲存格式的表格則具有較大的最大資料長度。如需儲存格式的特性,請參閱 第 18.2.3 節,「MyISAM 表格儲存格式」。您可以使用此語句來檢查最大資料和索引大小
SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
您也可以使用 myisamchk -dv /路徑/至/表格索引檔案。請參閱 第 15.7.7 節,「SHOW 語句」,或 第 6.6.4 節,「myisamchk — MyISAM 表格維護公用程式」。
以下是其他解決
MyISAM
表格檔案大小限制的方法如果您的大表格是唯讀的,您可以使用 myisampack 來壓縮它。myisampack 通常會將表格壓縮至少 50%,因此實際上您可以擁有更大的表格。myisampack 也可以將多個表格合併為單一表格。請參閱 第 6.6.6 節,「myisampack — 產生壓縮、唯讀 MyISAM 表格」。
MySQL 包含一個
MERGE
程式庫,讓您能夠將具有相同結構的MyISAM
表格集合當作單一MERGE
表格來處理。請參閱 第 18.7 節,「MERGE 儲存引擎」。
您正在使用
MEMORY
(HEAP
) 儲存引擎;在這種情況下,您需要增加max_heap_table_size
系統變數的值。請參閱 第 7.1.8 節,「伺服器系統變數」。