程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 通過分區(Partition)提升MySQL性能(3)

通過分區(Partition)提升MySQL性能(3)

編輯:關於MYSQL數據庫

MySQL> delimiter ;

MySQL> call load_part_tab();

Query OK, 1 row affected (8 min 17.75 sec)

MySQL> insert into no_part_tab select * from part_tab;

Query OK, 8000000 rows affected (51.59 sec)

Records: 8000000 Duplicates: 0 Warnings: 0

  表都准備好了。咱開始對這兩表中的數據進行簡單的范圍查詢吧。先分區了的,後沒分區的,跟著有執行過程解析(MySQL
Explain命令解析器),可以看到MySQL做了什麼:

MySQL> select count(*) from no_part_tab where

-> c3 > date '1995-01-01' and c3 < date '1995-12-31';

+----------+

| count(*) |

+----------+

| 795181 |

+----------+

1 row in set (38.30 sec)

MySQL> select count(*) from part_tab where

-> c3 > date '1995-01-01' and c3 < date '1995-12-31';

+----------+

| count(*) |

+----------+

| 795181 |

+----------+

1 row in set (3.88 sec)

MySQL> explain select count(*) from no_part_tab where

-> c3 > date '1995-01-01' and c3 < date '1995-12-31'\G

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: no_part_tab

type: ALL
possible_keys: NULL

key: NULL

key_len: NULL

ref: NULL

rows: 8000000

Extra: Using where

1 row in set (0.00 sec)

MySQL> explain partitions select count(*) from part_tab where

-> c3 > date '1995-01-01' and c3 < date '1995-12-31'\G

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: part_tab

partitions: p1

type: ALL

possible_keys: NULL

key: NULL


key_len: NULL

ref: NULL

rows: 798458

Extra: Using where

1 row in set (0.00 sec)

  從上面結果可以容易看出,設計恰當表分區能比非分區的減少90%的響應時間。而命令解析Explain程序也告訴我們在對已分區的表的查詢過程中僅對第一個分區­進行了掃描,其他都跳過了。

 這個分區功能對DBA很有用拉,特別對VLDB和需要快速反應的系統。

  對Vertical Partitioning的一些看法

  雖然MySQL5.1自動實現了水平分區,但在設計數據庫的時候不要輕視垂直分區。雖然要手工去實現垂直分區,但在特定場合下你會收益不少的。例如在前面建立的表中,VARC­HAR字段是你平常很少引用的,那麼對它進行垂直分區會不會提升速度呢?咱們看看測試結果:

MySQL> desc part_tab;


+-------+-------------+------+-----+---------+-------+


| FIEld | Type | Null | Key | Default | Extra |


+-------+-------------+------+-----+---------+-------+


| c1 | int(11) | YES | | NULL | |


| c2 | varchar(30) | YES | | NULL | |

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved