MySQL 9.0 版本注意事項
若要在截斷 InnoDB
資料表時回收作業系統磁碟空間,資料表必須儲存在自己的 .ibd 檔案中。若要讓資料表儲存在自己的 .ibd 檔案中,建立資料表時必須啟用 innodb_file_per_table
。此外,被截斷的資料表與其他資料表之間不能有外部鍵約束,否則 TRUNCATE TABLE
操作會失敗。但是,允許在同一個資料表的兩個欄位之間存在外部鍵約束。
當截斷資料表時,它會在新的 .ibd
檔案中被捨棄並重新建立,並且釋放的空間會返回給作業系統。這與截斷儲存在 InnoDB
系統表格空間中的 InnoDB
資料表 (當 innodb_file_per_table=OFF
時建立的資料表) 以及儲存在共用一般表格空間中的資料表不同,在截斷資料表之後,只有 InnoDB
可以使用釋放的空間。
截斷資料表並將磁碟空間返回給作業系統的能力,也表示實體備份會更小。截斷儲存在系統表格空間 (當 innodb_file_per_table=OFF
時建立的資料表) 或一般表格空間中的資料表會在表格空間中留下未使用的空間區塊。