文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


17.11.4 表格碎片整理

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

分散的一個症狀是表格佔用的空間比它 應該佔用的空間多。確切的空間量很難確定。所有 InnoDB 資料和索引都儲存在 B 樹中,並且它們的 填滿因數可能會從 50% 到 100% 不等。分散的另一個症狀是,表格掃描 (例如這種掃描) 所需的時間比它 應該所需的時間多

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

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

為了加快索引掃描速度,您可以定期執行 null ALTER TABLE 操作,這會導致 MySQL 重建表格

ALTER TABLE tbl_name ENGINE=INNODB

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

ALTER TABLE tbl_name ENGINE=INNODBALTER TABLE tbl_name FORCE 都使用 線上 DDL。如需詳細資訊,請參閱第 17.12 節,〈InnoDB 和線上 DDL〉

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

如果索引中的插入操作總是遞增,且紀錄只從尾端刪除,則 InnoDB 檔案空間管理演算法可保證索引中不會發生碎片。