MySQL表分区

想测试下表分区功能跟自主的分布式的性能差异,进行了简单的测试,前后花费了半个小时,可能测试数据不太准确。

【测试环境】

操作系统:Windows XP SP2
MySQL: 5.1.19-beta-community-nt-debug

【测试过程】

查看MySQL版本:

mysql> select version() ;
+--------------------------------+
| version()                      |
+--------------------------------+
5.1.19 -beta-community-nt-debug |
+--------------------------------+
1  row in set ( 0.00  sec)

 

建立分区表:

mysql> create table p1 (
    -> id int(
10 ) not null auto_increment ,
    -> username varchar(
32 ) default '' ,
    -> email varchar(
64 ) default '' ,
    -> created datetime default '
0000 - 00 - 00   00 : 00 : 00 ' ,
    -> primary key (id)
    -> ) engine
= myisam
    -> partition by range(id)(
    -> partition p1 values less than (
10000 ) ,
    -> partition p2 values less than (
20000 ) ,
    -> partition p3 values less than (
30000 ) ,
    -> partition p4 values less than (
40000 ) ,
    -> partition p5 values less than (
50000 ) ,
    -> partition p6 values less than (
60000 ) ,
    -> partition p7 values less than (
70000 ) ,
    -> partition p8 values less than (
80000 ) ,
    -> partition p9 values less than (
90000 ) ,
    -> partition p10 values less than maxvalue
    -> )
;
Query OK ,   0  rows affected ( 0.08  sec)

 

建立不分区(普通表):

mysql> create table p2 (
    -> id int(
10 ) not null auto_increment ,
    -> username varchar(
32 ) default '' ,
    -> email varchar(
64 ) default '' ,
    -> created datetime default '
0000 - 00 - 00   00 : 00 : 00 ' ,
    -> primary key (id)
    -> ) engine
= myisam ;
Query OK ,   0  rows affected ( 0.00  sec)

 

插入数据的存储过程:

mysql> delimiter //
mysql> create procedure load_tab()
    -> begin
    ->  declare v int default 
0 ;
    ->  while v <  100000
    ->          do
    ->          insert into p1 (username
, email , created) values ('jack' ,  '[email protected]' ,  now()) ;
    ->          set v  =  v +  1 ;
    ->  end while ;
    -> end
    -> //
Query OK
,   0  rows affected ( 0.00  sec)

 

给两个表分别插入数据:


mysql> delimiter 
;
mysql> call load_tab() ;
Query OK ,   1  row affected ( 11.09  sec)

 


mysql> insert into p2 select * from p1

;
Query OK ,   100001  rows affected ( 1.30  sec)
Records: 
100001   Duplicates:  0   Warnings:  0

 

查询结果比较:

mysql> select count( 1 ) from p1 ;
+----------+
| count(
1 ) |
+----------+
|   
100001  |
+----------+
1  row in set ( 0.00  sec)

 

mysql> select count(

1 ) from p2 ;
+----------+
| count(
1 ) |
+----------+
|   
100001  |
+----------+
1  row in set ( 0.00  sec)

 

 

mysql> select * from p1

;
100001  rows in set ( 0.41  sec)

 

mysql> select * from p2

;
100001  rows in set ( 0.42  sec)

 

 

 

【总结】

看来这个简单数据和在Windows平台上面,数据量太小,还无法看出采用分区表的优势,但是表分区比普通表还是要快 一点点,大数据量没有测试,因为没有安装了MySQL 5.1 的服务器,所以就简单的测试下,当然,还应该选择不同的分区方式,比如hash,混合之类的,这里只是简单的范围分区。

这个测试结果不太靠谱,姑且看看,建议需要使用的还是自己测试看看才是正道。 ^_^

你可能感兴趣的:(mysql)