MySQL 8.4 版本資訊
若要在截斷 InnoDB
資料表時回收作業系統磁碟空間,該資料表必須儲存在其自己的 .ibd 檔案中。若要讓資料表儲存在其自己的 .ibd 檔案中,則在建立資料表時,必須啟用 innodb_file_per_table
。此外,截斷的資料表與其他資料表之間不得有外部索引鍵約束,否則 TRUNCATE TABLE
作業會失敗。但是,允許在同一資料表的兩個欄位之間建立外部索引鍵約束。
當截斷資料表時,會將其捨棄並在新的 .ibd
檔案中重新建立,並將釋放的空間傳回作業系統。這與截斷儲存在 InnoDB
系統表空間 (當 innodb_file_per_table=OFF
時建立的資料表) 和儲存在共用的一般表空間中的 InnoDB
資料表形成對比,在這種情況下,資料表截斷後,只有 InnoDB
可以使用釋放的空間。
截斷資料表並將磁碟空間傳回作業系統的能力也表示實體備份可以更小。截斷儲存在系統表空間 (當 innodb_file_per_table=OFF
時建立的資料表) 或一般表空間中的資料表,會將未使用的空間區塊留在表空間中。