文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


17.11.4 表格碎片整理

隨機插入或刪除次要索引可能會導致索引變得破碎。碎片表示磁碟上索引頁面的實體順序與頁面上記錄的索引順序不接近,或者在分配給索引的 64 頁區塊中有許多未使用的頁面。

碎片的一個症狀是表格佔用的空間比它「應該」佔用的空間還多。確切的數量很難確定。所有 InnoDB 資料和索引都儲存在 B 樹中,它們的填滿因數可能從 50% 到 100% 不等。碎片的另一個症狀是表格掃描(例如此掃描)所花費的時間比它「應該」花費的時間還多。

SELECT COUNT(*) FROM t WHERE non_indexed_column <> 12345;

先前的查詢需要 MySQL 執行完整表格掃描,這是大型表格最慢的查詢類型。

若要加快索引掃描速度,您可以定期執行「空」ALTER TABLE 操作,這會導致 MySQL 重建表格

ALTER TABLE tbl_name ENGINE=INNODB

您也可以使用 ALTER TABLE tbl_name FORCE 來執行重建表格的「空」變更操作。

使用 ALTER TABLE tbl_name ENGINE=INNODBALTER TABLE tbl_name FORCE 都會使用線上 DDL。 更多資訊請參閱 第 17.12 節,「InnoDB 和線上 DDL」

另一種執行碎片整理操作的方法是使用 mysqldump 將表格傾印到文字檔案,刪除表格,然後從傾印檔案重新載入。

如果索引的插入始終是遞增的,並且記錄僅從末尾刪除,則 InnoDB 檔案空間管理演算法保證索引中不會發生碎片。