转载于:https://www.bilibili.com/video/BV1E7411q7Nx?p=1
一、RANGE分区
-- RANGE分区案例 create table t_student ( id varchar(50) not null, name varchar(20), age int, primary key (id,age) ) partition by range(age) ( partition p01 VALUES less than (10), partition p02 VALUES less than (20), partition p03 VALUES less than (30), partition p04 VALUES less than (MAXVALUE) );
二、LIST分区
-- LIST分区案例 -- LIST分区案例对于一个综合性的网店来说,商品分为诸多种类。我们可以按照商品ID进行range分区,也可以按照商品的类型划分分区。在这个例子中, LIST分区给了我们更多的选择。 create table t_commodity ( id varchar(50) not null, cid int, name varchar(20), date datetime ) partition by list (cid) ( partition po1 values in (1,2,3), partition po2 values in (4,5,6), partition po3 values in (7,8,9) );
三、HASH分区
-- HASH分区案例 -- 另外,在MySQL Cluster中,分区行为是自动的。默认情况下,分区的数量和ndb node数量相同。通常在节点数很多的情况下,会通过配置分区数和node group搭配进行调整。 create table t_company1 ( id varchar(50) not null, cid int, name varchar(20), date datetime ) partition by hash (cid) partitions 4;
四、LINEAR HASH分区
-- LINEAR HASH分区案例 -- 线性哈希分区和常规哈希分区在语法上的唯一区别在于,在"PARTITION BY" 子句中添加"LINEAR"关键字。 create table t_company2 ( id varchar(50) not null, cid int, name varchar(20), date datetime ) partition by linear hash (cid) partitions 4;
五、KEY分区
-- KEY分区案例 create table t_company3 ( id varchar(50) not null, cid int, name varchar(20), date datetime ) partition by linear key (cid) partitions 4;
六、多列分区
-- 多列分区案例 create table t_order ( a int, b int, c int ) partition by range columns(a,b) ( partition p01 values less than (10,10), partition po2 values less than (10,20), partition p03 values less than (10,30), partition p04 values less than (10,maxvalue), partition p05 values less than (maxvalue,maxvalue) ); -- 多列分区案例 -- 多列分区案例第一个分区用来存储雇佣于1990年以前的女职员,第二个分区存储股用于1990-2000年之间的女职员,第三个分区存储所有剩下的女职员。对于分区p04到p06 ,我们策略是一样的,只不过存储的是男职员。最后一个分区是控制情况。 create table t_emplovees ( emp_no int, birth_date datetime, first_name varchar(20), last_name varchar(20), gender char(1), hire_date datetime ) engine=myisam partition by range columns(gender,hire_date) ( partition p01 values less than ('F','1990-01-01'), partition p02 values less than ('F','2000-01-01'), partition p03 values less than ('F',maxvalue), partition p04 values less than ('M', '1990-01-01'), partition p05 values less than ('M','2000-01-01'), partition p06 values less than ('M',maxvalue), partition p07 values less than (maxvalue,maxvalue) );
七、子分区
-- 子分区案例 create table t_order_details ( id int, udate datetime ) partition by range(year(udate)) subpartition by hash(to_days(udate)) subpartitions 2 ( partition po values less than (1990), partition p1 values less than (2000), partition p2 values less than maxvalue ) -- 子分区案例 -- 将每个子分区保存在不同的存储上,优化1/0性能。 -- 注释:data directory 后跟的是数据存放的文件位置,index directory后跟的是索引存放的文件位置 create table t_order_content ( id int, udate datetime ) partition by range(year(udate)) subpartition by hash(to_days(udate)) ( partition p01 values less than (1990) ( subpartition s0 data directory ='/var/a/data' index directory = '/var/a/idx', subpartition s1 data directory = '/var/b/data' index directory = '/var/b/idx' ), partition p02 values less than (2000) ( subpartition s2 data directory ='/var/c/data' index directory = '/var/c/idx', subpartition s3 data directory = '/var/d/data' index directory = '/var/d/idx' ) );