可以使用專為此目的設計的 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
會截斷資料表中的所有分割區。