mysql分区介绍以及案例展示
分区类型
RANGE分区(portioning):根据列值所属的范围区间,将元组分配到各个分区。
LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:根据用户定义的函数的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。
1.创建分区表
CREATE TABLE part_tab
(c1 int default NULL,c2 varchar(30) default NULL,c3 date default NULL) engine=myisam
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
);
2.创建一个不分区的表
create table no_part_tab(c1 int(11) default NULL,c2 varchar(30) default NULL,c3 date default NULL)engine=myisam;
3.创建一个生成8000000行数据的存储过程
delimiter //
CREATE PROCEDURE load_part_tab()
begin
declare v int default 0;
while v < 8000000
do
insert into part_tab(c1,c2,c3)
values (v,'testing partitions',adddate('1995-01-01',(rand(v)36520) mod 3652));
set v = v + 1;
end while;
end
//
4.调用存储过程,生成数据
delimiter ;
call load_part_tab();
5.把数据同步到no_part_tab表中
insert into no_part_tab select from part_tab;
6.开始测试
explain select count() from no_part_tab where c3 > date '1995-01-01' and c3 < date '1995-12-31';
explain select count() from part_tab where c3 > date '1995-01-01' and c3 < date '1995-12-31';
已有 0 条评论