可以使用 SQL 陳述式,針對已分割區的表格執行許多表格和分割區維護任務,這些陳述式是為了此類目的而設計的。
可以使用陳述式 CHECK TABLE
、OPTIMIZE TABLE
、ANALYZE TABLE
和 REPAIR TABLE
來完成已分割區表格的表格維護,這些陳述式都支援用於已分割區的表格。
您可以針對 ALTER TABLE
使用許多擴充功能,以直接對一個或多個分割區執行此類型的操作,如下列清單中所述
重建分割區。 重建分割區;這與刪除儲存在分割區中的所有記錄,然後重新插入它們具有相同的效果。這對於碎片整理非常有用。
範例
ALTER TABLE t1 REBUILD PARTITION p0, p1;
最佳化分割區。 如果您已從分割區中刪除大量資料列,或者如果您對具有可變長度資料列(也就是說,具有
VARCHAR
、BLOB
或TEXT
資料欄)的已分割區表格進行許多變更,您可以使用ALTER TABLE ... OPTIMIZE PARTITION
來回收任何未使用的空間,並整理分割區資料檔案。範例
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;
在給定分割區上使用
OPTIMIZE PARTITION
等同於在該分割區上執行CHECK PARTITION
、ANALYZE PARTITION
和REPAIR PARTITION
。某些 MySQL 儲存引擎 (包括
InnoDB
) 不支援每個分割區的最佳化;在這些情況下,ALTER TABLE ... OPTIMIZE PARTITION
會分析並重建整個表格,並發出適當的警告。(錯誤 #11751825、錯誤 #42822) 請改用ALTER TABLE ... REBUILD PARTITION
和ALTER 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
會截斷表格中的所有分割區。