程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL分區表的管理~2,mysql分區表管理

MySQL分區表的管理~2,mysql分區表管理

編輯:MySQL綜合教程

MySQL分區表的管理~2,mysql分區表管理


一、維護分區

對於表的維護,我們一般有如下幾種方式: 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分區的范圍之外。

具體可參考MySQL的官方文檔

http://dev.mysql.com/doc/refman/5.6/en/partitioning-management-exchange.html

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved