mysql 分区总结(八)

分区应该注意的事项:

  1. 做分区时,要么不定义主键,要么把分区字段加入到主键中
  2. 分区字段不能为NULL,要不然怎么确定分区范围呢,所以尽量NOT NULL

mysql提供了添加、删除、重定义、合并、拆分分区的命令,这些操作都可以通过alter table 命令来实现

=========================================================

1.range分区操作:

详细地址:https://blog.csdn.net/yinjinshui/article/details/102458253

1.1创建:

create table <table> (
	// 字段
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
partition by range (分区字段) (
  partition <分区名称> values less than (Value),
  partition <分区名称> values less than (Value),
  ...
  partition <分区名称> values less than maxvalue
);


range:表示按范围分区
分区字段:表示要按照哪个字段进行分区,可以是一个字段名,也可以是对某个字段进行表达式运算如year(create_time),使用range最终的值必须是数字
分区名称: 要保证不同,也可以采用 p0、p1、p2 这样的分区名称,
less than : 表示小于
Value : 表示要小于某个具体的值,如 less than (10) 那么分区字段的值小于10的都会被分到这个分区
maxvalue: 表示一个最大的值

1.2新增分区:

alter table <table> add partition(partition <分区名称> values less than <Value>);

1.3删除某个分区:

alter table <table> drop partition <分区名称>;

1.4重置分区,合并分区:

alter table <table>
REORGANIZE PARTITION <Value1>,<Value2>,<Value3>,<Value4> INTO
(
  	  partition <分区名称> values less than (Value2), #将分区1和分区2合并
	  partition <分区名称> values less than (Value3),
	  partition <分区名称> values less than (Value4),
);

1.5移除分区:

alter table  <table> remove partitioning;

=========================================================

2.list分区操作

详细地址:https://blog.csdn.net/yinjinshui/article/details/102460788

2.1创建分区:

create table <table> (
	// 字段
) ENGINE=数据库引擎  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
partition by LIST (分区字段或者基于该字段的返回的整数值的表达式) (
  partition <分区名称> values IN (Value1,Value2,Value3),
  ...
  partition <分区名称> values IN (Value4, Value5)
);

list:表示固定值进行分区
分区名称: 要保证不同,也可以采用 p0、p1、p2 这样的分区名称,
ValueN : 表示某个具体的值

2.2新增分区

alter table <table> add partition ( partition <分区名称> values IN (Value1,Value2, Value3));

2.3重置分区,合并分区:

alter table <table>
REORGANIZE PARTITION <Value1>,<Value2>,<Value3>,<Value4>,< Value5> INTO
(
	 partition <分区名称> values IN (Value1,Value2,Value5),
	  partition <分区名称> values IN (Value4,Value3)
)

2.4删除分区

alter table <table> drop partition <分区名称>;

2.5移除分区

alter table  <table> remove partitioning;

=========================================================

3.hash分区

详细地址:https://blog.csdn.net/yinjinshui/article/details/102465461

3.1创建分区

create table <table> (
	// 字段
) ENGINE=数据库引擎  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
PARTITION BY HASH(expr)
PARTITIONS <num>;

hash:表示按hash分区
expr:可以是一个字段名或者基于某列值云散返回的一个整数,
expr可以是mysql中有效的任何函数或者其它表达式【表达式运算如year(create_time)】,只要它们返回一个即非常熟也非随机数的整数。
num:表示分区数量

3.2添加分区

	**不支持**

3.3重置分区

alter table <table> add partition partitions <num>;

3.4删除分区

	**不支持**

3.5移除表的分区

alter table <table> remove partitioning;

=========================================================

4.key分区

详细地址:https://blog.csdn.net/yinjinshui/article/details/102467242

4.1创建分区

create table <table> (
	// 字段
) ENGINE=数据库引擎  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1

#方法1:
partition by key(expr) partitions num;

#方法2(不指定默认首选主键作为分区键,在没有主键的情况下会选择非空唯一键作为分区键):
partition by key() partitions num;

#方法3(支持线性分区linear key):
partition by linear key(expr)


expr:是零个或者多个字段名的列表
num:表示分区数量
key分区也支持线性分区linear key

4.2添加分区

	**不支持**

4.3重置分区

alter table <table> add partition partitions <num>;

4.4删除分区

	**不支持**

4.5移除表的分区

alter table <table> remove partitioning;

=========================================================

5.columns分区

详细地址:https://blog.csdn.net/yinjinshui/article/details/102477372

5.1创建分区

create table <table> (
	// 字段
) ENGINE=数据库引擎  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1

#方法1:
partition by range columns(expr) (
	partition <分区名称> values less than (Value1,Value2),
	  ...
	partition <分区名称> values less than (Value3, Value4),
)

#方法2:

partition by list columns(expr) (
	partition <分区名称> values in (Value1,Value2),
	  ...
	partition <分区名称> values in than (Value3, Value4),
)

expr:支持一个或者多个字段作为分区键
分区名称: 要保证不同,也可以采用 p0、p1、p2 这样的分区名称,
ValueN : 表示某个具体的值

5.2新增分区

alter table <table> add partition (partition <分区名称> values less than ( (Value1,Value2));

alter table <table> add partition ( partition <分区名称> values IN (Value1,Value2, Value3));

5.3重置分区

alter table <table>
	REORGANIZE PARTITION <Value1>,<Value2>,<Value3>,<Value4> INTO
	(
	  	  partition <分区名称> values less than (Value2), #将分区1和分区2合并
		  partition <分区名称> values less than (Value3),
		  partition <分区名称> values less than (Value4),
	);


alter table <table>
	REORGANIZE PARTITION <Value1>,<Value2>,<Value3>,<Value4>,< Value5> INTO
	(
		 partition <分区名称> values IN (Value1,Value2,Value5),
		  partition <分区名称> values IN (Value4,Value3)
	)

5.4删除分区

alter table <table> drop partition <分区名称>;

5.5移除分区

alter table  <table> remove partitioning;

=========================================================

6.子分区

6.1创建分区

#语法1:
create table <table> (
	// 字段
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
partition by range (分区字段)
SUBPARTITION BY HASH(分区字段)
SUBPARTITIONS NUM(
	partition <分区名称> values less than (Value),
  	partition <分区名称> values less than (Value),
  	...
    partition <分区名称> values less than maxvalue
)

分区字段:表示要按照哪个字段进行分区,可以是一个字段名,也可以是对某个字段进行表达式运算如year(create_time),使用range最终的值必须是数字
分区名称: 要保证不同,也可以采用 p0、p1、p2 这样的分区名称,
less than : 表示小于
Value : 表示要小于某个具体的值,如 less than (10) 那么分区字段的值小于10的都会被分到这个分区
maxvalue: 表示一个最大的值
NUM:子分区数

#语法2:
	create table <table> (
		// 字段
	) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
	partition by range (分区字段)
	SUBPARTITION BY HASH(分区字段)
	SUBPARTITIONS NUM(
		partition <分区名称> values less than (Value)(
			subpartition <子分区名称>,
			subpartition <子分区名称>
		),
	  	partition <分区名称> values less than (Value)(
			subpartition <子分区名称>,
			subpartition <子分区名称>
		),
	  	...
	    partition <分区名称> values less than maxvalue(
			subpartition <子分区名称>,
			subpartition <子分区名称>
		)
	)
	
	分区字段:表示要按照哪个字段进行分区,可以是一个字段名,也可以是对某个字段进行表达式运算如year(create_time),使用range最终的值必须是数字
	分区名称: 要保证不同,也可以采用 p0、p1、p2 这样的分区名称,
	子分区名称: 要保证不同,也可以采用 s0、s1、s2 这样的子分区名称,子分区的名称不能喝分区名称重复
	less than : 表示小于
	Value : 表示要小于某个具体的值,如 less than (10) 那么分区字段的值小于10的都会被分到这个分区
	maxvalue: 表示一个最大的值

6.2添加子分区

**不支持**

6.3子分区重命名(只能对每个分区进行操作,不能针对每个子分区进行删除或添加操作)

alter table


REORGANIZE partition <分区名称>,<分区名称>,<分区名称>,<分区名称> into(
partition f1 values less than (2019)(
subpartition <子分区名称>,
subpartition <子分区名称>
),
partition f2 values less than (2020)(
subpartition <子分区名称>,
subpartition <子分区名称>
),
partition f3 values less than MAXVALUE(
subpartition <子分区名称>,
subpartition <子分区名称>
)
)

6.4删除子分区(只能对每个分区进行操作,不能针对每个子分区进行删除或添加操作)

**不支持**

6.5移除子分区(只能对每个分区进行操作,不能针对每个子分区进行删除或添加操作)

**不支持**
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值