接下来创建一个分区的表,按照年份进行拆分
mysql> use test
mysql> CREATE TABLE tab2 ( c1 int, c2 varchar(30) , c3 date )
PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),
PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE );
最后一行表示有可能在插入年份数据比2005大的数据可以插入,如果没有将会出错
刚才创建的两个表tab1和tab2没有数据只有一个空表;接下来为它们插入数据;
多一点,不然看不出效果;1000000条数据
创建存储过程,需要使用界定符
mysql> delimiter &&//指定存储过程结束符
mysql>CREATE PROCEDURE load_part_tab()
begin
declare x int default 0;
while x < 1000000
do
insert into test.tab1
values (x,'testing partitions',adddate('1995-01-01',(rand(x)*36520) mod 3652));
set x = x + 1;
end while;
end
&&
id INT NOT NULL, ========>> fname VARCHAR(30), ===========>姓氏
lname VARCHAR(30), ===========>名字
hired DATE NOT NULL DEFAULT '1970-01-01', ==========> 雇佣的日期,不能为空
separated DATE NOT NULL DEFAULT '9999-12-31', ==========>离开的日期,不能为空
job_code INT NOT NULL, =============> 员工职务的工号,不能为空
store_id INT NOT NULL ===========> 商店ID号,不能为空
)
partition BY RANGE (store_id) ( ============> 分区范围以商店ID为准
partition p0 VALUES LESS THAN (6), =========> p0包括小于6的id号
partition p1 VALUES LESS THAN (11), ===========>p1包括小于11ID号
partition p2 VALUES LESS THAN (16), ============>p2包括小于16ID号
partition p3 VALUES LESS THAN (21) ===============>p3包括小于21的ID号
);
可以看出修改之后的分区来自商店ID为25的员工可以加入。
介绍了range分区,那么我们进行个总结对range:
基于属于一个给定连续区间的列值,把多行分配给分区。这些区间要连续且不能相互重叠
而且在最后的区域中设置maxvalue防止大于区域的内容无法插入。 2)list分区;
比较类似range分区,区别在于range的值是连续的,而list是散值集合在一个行中,或许大家听的不太明白,一会给大家举个例子看下。 LIST分区通过使用“PARTITION BY LIST(expr)”来实现,其中“expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“VALUES IN (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。
我们还以商店这个例子为大家进行演示,正好和range进行对比:
首先创建库
mysql> create database tty;
这样在表中增加或者删除制定区域的员工记录变得容易起来,假如说pNorth商店倒闭了现在需要将员工记录全部删掉可以使用“ALTER TABLE employees DROP PARTITION pWest;”来进行删除,它与具有同样作用的DELETE (删除)查询“DELETE query DELETE FROM employees WHERE store_id IN (4,12,13,14,18);”比起来,要有效得多。
接下来为大家介绍下另外的三种分区方式:作为了解 3)HASH分区;
这种模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。 hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据量大致一致。分区中; MYSQL自动完成这些工作,用户所要定一个列值或者表达式,以及指定被分区的表将要被分割成的分区数量。
接下来举例说明:
mysql> create table t_hash( a int(11), b datetime) partition by hash(year(b)) partitions 4;