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

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 會截斷資料表中的所有分割區。