show plugins;
查看当前库是否启用了分区功能
MySQL支持如下几种类型的分区
RANGE分区:行数据基于一个给定连续范围分区
create table t( id int(11))engine=innodbpartition by range(id)( partition p0 values less than(10), partition p1 values less than(20), partition p2 values less than(MAXVALUE));create table sales( money int(11) unsigned, date datetime)engine=innodb partition by range (year(date))( partition p2017 values less than(2018), partition p2018 values less than(2019), partition p2019 values less than(2020));alter table sales drop partition p2018;explain partition select * from sales where date<='2018-12-31' and date>='2018-01-01;
LIST分区:同RANGE,区别在于给定的不是连续范围,是离散的值
create table t( a int(11), b int(11))engine=innodbpartition by list(b)( partition p0 values in(1,3,5,7,9), partition p1 values in(2,4,6,8,10));
HASH分区:根据用户自定义的表达式的返回值进行分区,返回值不能是负数
create table t( id int(11), date datetime)engine=innodbpartition by hash(year(date))partitions 4;
KEY分区:根据MySQL内部提供的哈希函数进行分区
KEY分区和HASH分区相似,KEY分区支持除text和BLOB之外的所有数据类型的分区,
而HASH分区只支持数字分区,KEY分区不允许使用用户自定义的表达式进行分区,KEY分区使用系统提供的HASH函数进行分区
COLUMNS分区:可以直接使用非整型的数据进行分区,分区根据类型直接比较而得,不需要转换为整型
无论创建何种类型的分区,如果表中存在主键或唯一索引的列,则分区列必须是主键或唯一索引的一部分
在没有主键和唯一索引的表中可以指定任意列为分区列