MySQL 9.0 參考手冊  /  ...  /  分割區的維護

26.3.4 分割區的維護

可以使用 SQL 陳述式,針對已分割區的表格執行許多表格和分割區維護任務,這些陳述式是為了此類目的而設計的。

可以使用陳述式 CHECK TABLEOPTIMIZE TABLEANALYZE TABLEREPAIR TABLE 來完成已分割區表格的表格維護,這些陳述式都支援用於已分割區的表格。

您可以針對 ALTER TABLE 使用許多擴充功能,以直接對一個或多個分割區執行此類型的操作,如下列清單中所述

  • 重建分割區。 重建分割區;這與刪除儲存在分割區中的所有記錄,然後重新插入它們具有相同的效果。這對於碎片整理非常有用。

    範例

    ALTER TABLE t1 REBUILD PARTITION p0, p1;
  • 最佳化分割區。 如果您已從分割區中刪除大量資料列,或者如果您對具有可變長度資料列(也就是說,具有 VARCHARBLOBTEXT 資料欄)的已分割區表格進行許多變更,您可以使用 ALTER TABLE ... OPTIMIZE PARTITION 來回收任何未使用的空間,並整理分割區資料檔案。

    範例

    ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

    在給定分割區上使用 OPTIMIZE PARTITION 等同於在該分割區上執行 CHECK PARTITIONANALYZE PARTITIONREPAIR PARTITION

    某些 MySQL 儲存引擎 (包括 InnoDB) 不支援每個分割區的最佳化;在這些情況下,ALTER TABLE ... OPTIMIZE PARTITION 會分析並重建整個表格,並發出適當的警告。(錯誤 #11751825、錯誤 #42822) 請改用 ALTER TABLE ... REBUILD PARTITIONALTER TABLE ... ANALYZE PARTITION,以避免此問題。

  • 分析分割區。 這會讀取並儲存分割區的金鑰分佈。

    範例

    ALTER TABLE t1 ANALYZE PARTITION p3;
  • 修復分割區。 這會修復損毀的分割區。

    範例

    ALTER TABLE t1 REPAIR PARTITION p0,p1;

    通常,當分割區包含重複的金鑰錯誤時,REPAIR PARTITION 會失敗。您可以使用 ALTER IGNORE TABLE 與此選項,在這種情況下,所有由於存在重複金鑰而無法移動的資料列都會從分割區中移除 (錯誤 #16900947)。

  • 檢查分割區。 您可以使用 CHECK TABLE 來檢查非分割區表格中的錯誤,您可以使用類似的方式來檢查分割區的錯誤。

    範例

    ALTER TABLE trb3 CHECK PARTITION p1;

    此陳述式會告訴您表格 t1 的分割區 p1 中的資料或索引是否已損毀。如果發生這種情況,請使用 ALTER TABLE ... REPAIR PARTITION 來修復分割區。

    通常,當分割區包含重複的金鑰錯誤時,CHECK PARTITION 會失敗。您可以使用 ALTER IGNORE TABLE 與此選項,在這種情況下,陳述式會傳回分割區中找到重複金鑰違規的每個資料列的內容。僅報告表格分割運算式中資料欄的值。(錯誤 #16900947)

剛剛顯示的清單中的每個陳述式也支援關鍵字 ALL 來取代分割區名稱的清單。使用 ALL 會導致陳述式對表格中的所有分割區執行動作。

您也可以使用 ALTER TABLE ... TRUNCATE PARTITION 來截斷分割區。此陳述式可以用於從一個或多個分割區中刪除所有資料列,其方式與 TRUNCATE TABLE 從表格中刪除所有資料列的方式非常相似。

ALTER TABLE ... TRUNCATE PARTITION ALL 會截斷表格中的所有分割區。