簡單測試MySQL 5.1 表分區功能

日期:2008-07-04  作者:喜騰小二  來源:PHPChina


想測試下表分區功能跟自主的分散式的效能差異,進行了簡單的測試,前後花費了半個小時,可能測試資料不太準確。

【測試環境】

操作係統: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', 'jack@example.com', 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,混合之類的,這裡隻是簡單的範圍分區。

這個測試結果不太靠譜,姑且看看,建議需要使用的還是自己測試看看才是正道。 ^_^

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计