查看分区情况
- 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'));
阅读(3176) | 评论(0) | 转发(0) |