MySQL資料庫分區表的管理~2

一、維護分區

 

對於表的維護,我們一般有如下幾種方式: CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE和REPAIR TABLE。

 

而這幾種方式,對於分區同樣適用。下面,我們一一闡述各種的作用。

 

1. Rebuilding partitions

 

重建分區,它相當於先刪除分區中的數據,然後重新插入。這個主要是用於分區的碎片整理。

 

譬如:

 

ALTER TABLE t1 REBUILD PARTITION p0, p1;

2. Optimizing partitions

 

該命令主要是用於回收空閑空間和分區的碎片整理。對分區執行該命令,相當於依次對分區執行 CHECK PARTITION, ANALYZE PARTITION,REPAIR PARTITION命令。

 

譬如:

 

ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

註意:

 

一些存儲引擎,譬如InnoDB,並不支持基於分區的Optimizing。當你執行該命令時,會rebuild整張表,在 MySQL 5.6.9版本以上,執行該命令會導致整張表被rebuild和analyze。在這種情況下,建議直接使用 ALTER TABLE … REBUILD PARTITION 或 ALTER TABLE … ANALYZE PARTITION。

 

3. Analyzing partitions

 

讀取和存儲分區中值的分佈情況

 

ALTER TABLE t1 ANALYZE PARTITION p3;

4.  Repairing partitions

 

修復被破壞的分區

 

ALTER TABLE t1 REPAIR PARTITION p0,p1;

5. Checking partitions

 

檢查分區是否存在錯誤

 

ALTER TABLE trb3 CHECK PARTITION p1;

註意:

 

1> mysqlcheck和myisamchk並不支持分區表

 

2> 上述分區名也可用all替代,指的是對所有分區進行操作。

 

3> ANALYZE, CHECK, OPTIMIZE, REBUILD, REPAIR和TRUNCATE命令並不適用於子分區。

 

 

 

二、如何獲取分區的相關信息

 

1. 通過 SHOW CREATE TABLE 語句來查看分區表的分區子句

 

譬如:

 

 

mysql> show create table e\G

*************************** 1. row ***************************

       Table: e

Create Table: CREATE TABLE `e` (

  `id` int(11) NOT NULL,

  `fname` varchar(30) DEFAULT NULL,

  `lname` varchar(30) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

/*!50100 PARTITION BY RANGE (id)

(PARTITION p0 VALUES LESS THAN (50) ENGINE = InnoDB,

 PARTITION p1 VALUES LESS THAN (100) ENGINE = InnoDB,

 PARTITION p2 VALUES LESS THAN (150) ENGINE = InnoDB,

 PARTITION p3 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */

1 row in set (0.00 sec)

 

2. 通過 SHOW TABLE STATUS 語句來查看表是否分區

 

對應Create_options字段,譬如:

 

 

mysql> show table status\G

*************************** 1. row ***************************

           Name: e

         Engine: InnoDB

        Version: 10

     Row_format: Compact

           Rows: 6

 Avg_row_length: 10922

    Data_length: 65536

Max_data_length: 0

   Index_length: 0

      Data_free: 0

 Auto_increment: NULL

    Create_time: 2015-12-07 22:26:06

    Update_time: NULL

     Check_time: NULL

      Collation: latin1_swedish_ci

       Checksum: NULL

 Create_options: partitioned

        Comment: 

 

3. 查看 INFORMATION_SCHEMA.PARTITIONS表

 

4. 通過 EXPLAIN PARTITIONS SELECT 語句查看對於具體的SELECT語句,會訪問哪個分區。

 

 

 

三、分區交換

 

分區交換的語法如下:

 

ALTER TABLE pt EXCHANGE PARTITION p WITH TABLE nt

其中,pt是分區表,p是pt的分區(註:也可以是子分區),nt是目標表。

 

其實,分區交換的限制還是蠻多的:

 

1> nt不能為分區表

 

2> nt不能為臨時表

 

3> nt和pt的結構必須一致

 

4> nt不存在任何外鍵約束,即既不能是主鍵,也不能是外鍵。

 

5> nt中的數據不能位於p分區的范圍之外。

You May Also Like