MySQL 資料庫的有效最大資料表大小通常取決於作業系統對檔案大小的限制,而不是 MySQL 的內部限制。如需有關作業系統檔案大小限制的最新資訊,請參閱特定於您作業系統的文件。
Windows 使用者請注意,FAT 和 VFAT (FAT32) 不適合在 MySQL 生產環境中使用。請改用 NTFS。
如果您遇到資料表已滿錯誤,可能有幾個原因導致此錯誤
磁碟可能已滿。
您正在使用
InnoDB
資料表,且InnoDB
表格空間檔案中的空間已用完。最大表格空間大小也是資料表的最大大小。有關表格空間大小限制,請參閱第 17.21 節「InnoDB 限制」。一般而言,建議將大於 1TB 的資料表分割為多個表格空間檔案。
您已達到作業系統的檔案大小限制。例如,您正在使用支援最大 2GB 檔案的作業系統上的
MyISAM
資料表,並且資料檔案或索引檔案已達到此限制。您正在使用
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 節,「伺服器系統變數」。