标签:
ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;2:删除某个分区的数据
ALTER TABLE tr DROP PARTITION p2;
3:为分区表添加一个分区ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));
ALTER TABLE tt ADD PARTITION (PARTITION p2 VALUES IN (7, 14, 21));
ALTER TABLE employees ADD PARTITION (
PARTITION p5 VALUES LESS THAN (2010),
PARTITION p6 VALUES LESS THAN MAXVALUE
);
ALTER TABLE members
REORGANIZE PARTITION p0 INTO (
PARTITION n0 VALUES LESS THAN (1960),
PARTITION n1 VALUES LESS THAN (1970)
);
5:也可以将两个分区合并为一个分区,也可以理解为重新组织分区ALTER TABLE members REORGANIZE PARTITION s0,s1 INTO (
PARTITION p0 VALUES LESS THAN (1970)
);
ALTER TABLEtbl_nameREORGANIZE PARTITIONpartition_listINTO (partition_definitions);
ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO (
PARTITION m0 VALUES LESS THAN (1980),
PARTITION m1 VALUES LESS THAN (2000)
);
ALTER TABLE tt ADD PARTITION (PARTITION np VALUES IN (4, 8));
ALTER TABLE tt REORGANIZE PARTITION p1,np INTO (
PARTITION p1 VALUES IN (6, 18),
PARTITION np VALUES in (4, 8, 12)
);
CREATE TABLE clients (
id INT,
fname VARCHAR(30),
lname VARCHAR(30),
signed DATE
)
PARTITION BY HASH( MONTH(signed) )
PARTITIONS 12;
将分区表从12个分区变为8个分区ALTER TABLE clients COALESCE PARTITION 4;
同样的有以下的语句关于KEY分区的表:mysql>当然还有有限制的CREATE TABLE clients_lk (->id INT,->fname VARCHAR(30),->lname VARCHAR(30),->signed DATE->)->PARTITION BY LINEAR KEY(signed)->PARTITIONS 12;Query OK, 0 rows affected (0.03 sec) mysql>ALTER TABLE clients_lk COALESCE PARTITION 4;Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE clients COALESCE PARTITION 18;
ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead
ALTER TABLE clients ADD PARTITION PARTITIONS 6;交换分区,子分区的管理
交换分区,ALTER TABLE pt EXCHANGE PARTITION p WITH TABLE nt
ALTER TABLEptEXCHANGE PARTITIONpWITH TABLEnt with VALIDATION ;
CREATE TABLE e (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30)
)
PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (50),
PARTITION p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (150),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);
INSERT INTO e VALUES
(1669, "Jim", "Smith"),
(337, "Mary", "Jones"),
(16, "Frank", "White"),
(2005, "Linda", "Black");
查看分区和分区的行数SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTHFROM INFORMATION_SCHEMA.PARTITIONSWHERE TABLE_SCHEMA = ‘p‘ AND TABLE_NAME LIKE ‘e‘;
CREATE TABLE e2 LIKE e;
然后交换分区开始了:ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2;
这个语句是很奇怪的,如果e2里面没有数据的话就是切出分区,如果e2里面有数据的话就是相互交换ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2 WITHOUT VALIDATION;
WITHOUT VALIDATION 指定的时候效率会更高,因为不再做逐行验证了.
子分区和没分区的表进行切换
>然后就可以切分区了,先查看一下分区,CREATE TABLE es (->id INT NOT NULL,->fname VARCHAR(30),->lname VARCHAR(30)->)->PARTITION BY RANGE (id)->SUBPARTITION BY KEY (lname)->SUBPARTITIONS 2 (->PARTITION p0 VALUES LESS THAN (50),->PARTITION p1 VALUES LESS THAN (100),->PARTITION p2 VALUES LESS THAN (150),->PARTITION p3 VALUES LESS THAN (MAXVALUE)->);
ALTER TABLE es EXCHANGE PARTITION p3sp0 WITH TABLE es2;
当前执行切出分区前,必须要对新表做以下的处理:ALTER TABLE es2 REMOVE PARTITIONING;
ALTER TABLE es3 ENGINE = MyISAM;
维护表分区ALTER TABLE t1 REBUILD PARTITION p0, p1;2:重新组织分区
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;3:分析某个分区,主要看行数和名称以及状态
ALTER TABLE t1 ANALYZE PARTITION p3;4:修复分区,有重复值的时候就会报错.
ALTER TABLE t1 REPAIR PARTITION p0,p1;5:检查分区的状态
ALTER TABLE trb3 CHECK PARTITION p1;6:truncate分区
Using the SHOW CREATE TABLE statement to view the partitioning clauses used in creating a partitioned table.
Using the SHOW TABLE STATUS statement to determine whether a table is partitioned.
Querying the INFORMATION_SCHEMA.PARTITIONS table.
Using the statement EXPLAIN PARTITIONS SELECT to see which partitions are used by a given SELECT.
mysql> EXPLAIN PARTITIONS SELECT * FROM trb1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: trb1
partitions: p0,p1,p2,p3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using filesort
mysql>分区的一些添删查修语句:CREATE TABLE employees_sub (->id INT NOT NULL AUTO_INCREMENT,->fname VARCHAR(25) NOT NULL,->lname VARCHAR(25) NOT NULL,->store_id INT NOT NULL,->department_id INT NOT NULL,->PRIMARY KEY pk (id, lname)->)->PARTITION BY RANGE(id)->SUBPARTITION BY KEY (lname)->SUBPARTITIONS 2 (->PARTITION p0 VALUES LESS THAN (5),->PARTITION p1 VALUES LESS THAN (10),->PARTITION p2 VALUES LESS THAN (15),->PARTITION p3 VALUES LESS THAN MAXVALUE->);
mysql>DELETE FROM employees PARTITION (p0, p1)->WHERE fname LIKE ‘j%‘;Query OK, 2 rows affected (0.09 sec)
mysql>UPDATE employees PARTITION (p2)->SET store_id = 2 WHERE fname = ‘Jill‘;
SELECT * FROM employees PARTITION (p2);
mysql>分区不够多,要添加分区:INSERT INTO employees PARTITION (p2) VALUES (20, ‘Jan‘, ‘Jones‘, 1, 3);ERROR 1729 (HY000): Found a row not matching the given partition set mysql>INSERT INTO employees PARTITION (p3) VALUES (20, ‘Jan‘, ‘Jones‘, 1, 3);Query OK, 1 row affected (0.07 sec)
ysql>ALTER TABLE employees->REORGANIZE PARTITION p3 INTO (->PARTITION p3 VALUES LESS THAN (20),->PARTITION p4 VALUES LESS THAN (25),->PARTITION p5 VALUES LESS THAN MAXVALUE->);Query OK, 6 rows affected (2.09 sec) Records: 6 Duplicates: 0 Warnings: 0
ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;2:删除某个分区的数据
ALTER TABLE tr DROP PARTITION p2;
3:为分区表添加一个分区ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));
ALTER TABLE tt ADD PARTITION (PARTITION p2 VALUES IN (7, 14, 21));
ALTER TABLE employees ADD PARTITION (
PARTITION p5 VALUES LESS THAN (2010),
PARTITION p6 VALUES LESS THAN MAXVALUE
);
ALTER TABLE members
REORGANIZE PARTITION p0 INTO (
PARTITION n0 VALUES LESS THAN (1960),
PARTITION n1 VALUES LESS THAN (1970)
);
5:也可以将两个分区合并为一个分区,也可以理解为重新组织分区ALTER TABLE members REORGANIZE PARTITION s0,s1 INTO (
PARTITION p0 VALUES LESS THAN (1970)
);
ALTER TABLEtbl_nameREORGANIZE PARTITIONpartition_listINTO (partition_definitions);
ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO (
PARTITION m0 VALUES LESS THAN (1980),
PARTITION m1 VALUES LESS THAN (2000)
);
ALTER TABLE tt ADD PARTITION (PARTITION np VALUES IN (4, 8));
ALTER TABLE tt REORGANIZE PARTITION p1,np INTO (
PARTITION p1 VALUES IN (6, 18),
PARTITION np VALUES in (4, 8, 12)
);
CREATE TABLE clients (
id INT,
fname VARCHAR(30),
lname VARCHAR(30),
signed DATE
)
PARTITION BY HASH( MONTH(signed) )
PARTITIONS 12;
将分区表从12个分区变为8个分区ALTER TABLE clients COALESCE PARTITION 4;
同样的有以下的语句关于KEY分区的表:mysql>当然还有有限制的CREATE TABLE clients_lk (->id INT,->fname VARCHAR(30),->lname VARCHAR(30),->signed DATE->)->PARTITION BY LINEAR KEY(signed)->PARTITIONS 12;Query OK, 0 rows affected (0.03 sec) mysql>ALTER TABLE clients_lk COALESCE PARTITION 4;Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE clients COALESCE PARTITION 18;
ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead
ALTER TABLE clients ADD PARTITION PARTITIONS 6;交换分区,子分区的管理
ALTER TABLEptEXCHANGE PARTITIONpWITH TABLEnt with VALIDATION ;
CREATE TABLE e (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30)
)
PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (50),
PARTITION p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (150),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);
INSERT INTO e VALUES
(1669, "Jim", "Smith"),
(337, "Mary", "Jones"),
(16, "Frank", "White"),
(2005, "Linda", "Black");
查看分区和分区的行数SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTHFROM INFORMATION_SCHEMA.PARTITIONSWHERE TABLE_SCHEMA = ‘p‘ AND TABLE_NAME LIKE ‘e‘;
CREATE TABLE e2 LIKE e;
然后交换分区开始了:ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2;
这个语句是很奇怪的,如果e2里面没有数据的话就是切出分区,如果e2里面有数据的话就是相互交换ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2 WITHOUT VALIDATION;
>然后就可以切分区了,先查看一下分区,CREATE TABLE es (->id INT NOT NULL,->fname VARCHAR(30),->lname VARCHAR(30)->)->PARTITION BY RANGE (id)->SUBPARTITION BY KEY (lname)->SUBPARTITIONS 2 (->PARTITION p0 VALUES LESS THAN (50),->PARTITION p1 VALUES LESS THAN (100),->PARTITION p2 VALUES LESS THAN (150),->PARTITION p3 VALUES LESS THAN (MAXVALUE)->);
ALTER TABLE es EXCHANGE PARTITION p3sp0 WITH TABLE es2;
当前执行切出分区前,必须要对新表做以下的处理:ALTER TABLE es2 REMOVE PARTITIONING;
ALTER TABLE es3 ENGINE = MyISAM;
维护表分区ALTER TABLE t1 REBUILD PARTITION p0, p1;2:重新组织分区
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;3:分析某个分区,主要看行数和名称以及状态
ALTER TABLE t1 ANALYZE PARTITION p3;4:修复分区,有重复值的时候就会报错.
ALTER TABLE t1 REPAIR PARTITION p0,p1;5:检查分区的状态
ALTER TABLE trb3 CHECK PARTITION p1;6:truncate分区
Using the SHOW CREATE TABLE statement to view the partitioning clauses used in creating a partitioned table.
Using the SHOW TABLE STATUS statement to determine whether a table is partitioned.
Querying the INFORMATION_SCHEMA.PARTITIONS table.
Using the statement EXPLAIN PARTITIONS SELECT to see which partitions are used by a given SELECT.
mysql> EXPLAIN PARTITIONS SELECT * FROM trb1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: trb1
partitions: p0,p1,p2,p3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using filesort
mysql>分区的一些添删查修语句:CREATE TABLE employees_sub (->id INT NOT NULL AUTO_INCREMENT,->fname VARCHAR(25) NOT NULL,->lname VARCHAR(25) NOT NULL,->store_id INT NOT NULL,->department_id INT NOT NULL,->PRIMARY KEY pk (id, lname)->)->PARTITION BY RANGE(id)->SUBPARTITION BY KEY (lname)->SUBPARTITIONS 2 (->PARTITION p0 VALUES LESS THAN (5),->PARTITION p1 VALUES LESS THAN (10),->PARTITION p2 VALUES LESS THAN (15),->PARTITION p3 VALUES LESS THAN MAXVALUE->);
mysql>DELETE FROM employees PARTITION (p0, p1)->WHERE fname LIKE ‘j%‘;Query OK, 2 rows affected (0.09 sec)
mysql>UPDATE employees PARTITION (p2)->SET store_id = 2 WHERE fname = ‘Jill‘;
SELECT * FROM employees PARTITION (p2);
mysql>分区不够多,要添加分区:INSERT INTO employees PARTITION (p2) VALUES (20, ‘Jan‘, ‘Jones‘, 1, 3);ERROR 1729 (HY000): Found a row not matching the given partition set mysql>INSERT INTO employees PARTITION (p3) VALUES (20, ‘Jan‘, ‘Jones‘, 1, 3);Query OK, 1 row affected (0.07 sec)
ysql>ALTER TABLE employees->REORGANIZE PARTITION p3 INTO (->PARTITION p3 VALUES LESS THAN (20),->PARTITION p4 VALUES LESS THAN (25),->PARTITION p5 VALUES LESS THAN MAXVALUE->);Query OK, 6 rows affected (2.09 sec) Records: 6 Duplicates: 0 Warnings: 0
标签:
原文地址:http://www.cnblogs.com/shengdimaya/p/5384884.html