MySQL 9.0 版本注意事項
隨機插入或刪除次要索引可能會導致索引變得分散。分散表示磁碟上索引頁面的實體排序與頁面上記錄的索引排序不接近,或者分配給索引的 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
來執行重建表格的 「null」變更操作。tbl_name
FORCE
ALTER TABLE
和 tbl_name
ENGINE=INNODBALTER TABLE
都使用 線上 DDL。如需詳細資訊,請參閱第 17.12 節,〈InnoDB 和線上 DDL〉。tbl_name
FORCE
執行碎片整理操作的另一種方法是使用 mysqldump 將表格傾印到文字檔案,刪除表格,然後從傾印檔案重新載入。
如果索引中的插入操作總是遞增,且紀錄只從尾端刪除,則 InnoDB
檔案空間管理演算法可保證索引中不會發生碎片。