查看分区情况
点击(此处)折叠或打开
- SELECT * FROM information_schema.PARTITIONS WHERE table_name='table_name';
PARTITION_NAME:分区的名称
PARTITION_METHOD:分区的类型
TABLE_ROWS:分区数据条数
RANGE分区:
点击(此处)折叠或打开
-
create table t (
-
id int) engine=innodb
-
partition by range (id) (
-
partition p0 values less than (10), --id小于10的加入p0分区
- partition p1 values less than (20));--id大于等于10小于20的加入p1分区
增加分区
点击(此处)折叠或打开
- alter table r add partition (partition p2 values less than maxvalue); --所有大于等于20的加入p2分区
点击(此处)折叠或打开
-
CREATE TABLE `w` (
-
`money` INT(10) UNSIGNED NOT NULL,
-
`date` DATETIME DEFAULT NULL
-
) ENGINE=INNODB DEFAULT CHARSET=utf8
-
PARTITION BY RANGE (YEAR(DATE)) --定义的规则也可以是函数
-
(PARTITION p2010 VALUES LESS THAN (2010),
-
PARTITION p2001 VALUES LESS THAN (2011),
- PARTITION p2012 VALUES LESS THAN (2012));
删除分区
点击(此处)折叠或打开
- alter table w drop partition p2010;
--删除分区,则分区的数据也删除
----------------------------------------------------------------------
LIST分区
点击(此处)折叠或打开
-
CREATE TABLE m (
-
a INT,
-
b INT)ENGINE=innnodb
-
PARTITION BY LIST (b)(
-
PARTITION p0 VALUES IN (1,2,3,4,5),
-
PARTITION p1 VALUES IN (6,7,8,9,10));
-
- insert into m values (1,6),(2,7),(3,11),(4,9)
--插入的值(3,11)不符合,如果是innodb引擎,后面(4,9)符合条件不会插入表中,
如果是myisam引擎,后面(4,9)符合条件则会插入表中
----------------------------------------------------------------------
HASH分区
点击(此处)折叠或打开
-
CREATE TABLE m_hash (
-
a INT,
-
b DATETIME)ENGINE=innnodb
-
PARTITION BY HASH (YEAR(b)) --"partition by hash (expr)" expr是一个返回整数的表达式
- PARTITIONS 4; --表示要被分割成分区的数量,没有则默认是1
如:加入分区的算法mod(expr,分区数量4)=0 则加入p0
点击(此处)折叠或打开
- PARTITION BY LINEAR HASH (YEAR(b))
--与hash只是算法不同,返回是值是一样的
----------------------------------------------------------------------
COLUMNS分区
mysql5.5开始支持,视为RANGE分区和LIST分区的一种进化,支持INT,SMALLINT,TINYINT,BIGINT.DATE,DATETIME.CHAR,VARCHAR,BINARY,VARBINARY类型
点击(此处)折叠或打开
-
CREATE TABLE t_columns_range(
-
a INT,
-
b DATETIME) ENGINE=INNODB
-
PARTITION BY RANGE COLUMNS (b) --也可以PARTITION BY LESS COLUMNS (b)
-
(PARTITION p0 VALUES LESS THAN('2009-01-01'),
- PARTITION p1 VALUES LESS THAN('2010-01-01'));