表分区的优点:
查询优化
- WHERE在某些分区中进行,不用查询更多的数据
- 进行统计时,可以并行处理
- 由于进行分区数据可以放在不同的磁盘,增加了查询的吞吐量
- 删除数据更加方便,因为有时候,整个分区不需要了,直接删除
- 存储的数据量加大了,可以将一个表中的数据放到不同的磁盘
缺点
除了数据库管理方面复杂了点,其它的还没有发现
只有5.1及之后的版本才支付分区,同时5.1中分区的一些维护的工具还不完善
mysql目前四种分区
1range
根据某个列的某种运算进行分区,分区的标志都是该列的某种运算后的连续区间
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
) ALTER TABLE ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));
对于通过RANGE分区的表,只可以使用ADD PARTITION添加新的分区到分区列表的高端
2list分区
根据某个列的某种运算进行分区,分区的标志都是该列的某种运算后的集合
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT, store_id INT ) PARTITION BY LIST(store_id) PARTITION pNorth VALUES IN (3,5,6,9,17), PARTITION pEast VALUES IN (1,2,10,11,19,20), PARTITION pWest VALUES IN (4,12,13,14,18), PARTITION pCentral VALUES IN (7,8,15,16) ) ;
3hash
某列某种运算后取模分配
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4 ;
4key
md5分配分区
CREATE TABLE tk (
col1 INT NOT NULL,
col2 CHAR(5),
col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;
转移分区(list,range):
调整分区的结构,不会丢失数据
ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO (partition_definitions ) ;
ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO ( PARTITION m0 VALUES LESS THAN (1980), PARTITION m1 VALUES LESS THAN (2000) ) ;
转移分区的一种方法,重建分区后,重新导数据