首页 > 数据库技术 > 详细

MySQL 分区性能探究(持续更新中)

时间:2015-10-15 23:48:53      阅读:489      评论:0      收藏:0      [点我收藏+]

参考:http://imysql.com/node/30

<一> 数据准备

1.1 创建分区表 part_tab

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 
)

1.2 创建非分区表 no_part_tab

 创建非分区表
 create table no_part_tab
 (
 	c1 int(11) default NULL,
 	c2 varchar(30) default NULL,
 	c3 date default NULL
 ) engine=myisam

1.3 利用存储过程,向分区表 part_tab 中插入 800万条数据

 delimiter // 
 CREATE PROCEDURE load_part_tab()
 begin
     declare v int default 0;
     while v < 8000000
     do
         insert into part_tab
         values (v,‘testing partitions‘,adddate(‘1995-01-01‘,(rand(v)*36520) mod 3652));
          set v = v + 1;
     end while;
 end
 //
 delimiter ;

调用 load_part_tab()

call load_part_tab();

1.4 向非分区表中插入同样的数据

insert into no_part_tab select * from part_tab

<二> 比较

2.1 查询有分区的表

select count(*) from part_tab where c3 > date ‘1995-01-01‘ and c3 < date ‘1995-12-31‘;

效果,用时0.209s:

技术分享

2.2 查询无分区的表:

select count(*) from no_part_tab where c3 > date ‘1995-01-01‘ and c3 < date ‘1995-12-31‘;

效果,用时1.806s:

技术分享

<三> 分析

对比很明显,如果where 条件与分区匹配的话,分区表的效果是极好的。

MySQL 分区性能探究(持续更新中)

原文:http://my.oschina.net/pingjiangyetan/blog/517801

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!