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

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

編輯:關於MYSQL數據庫
對數據管理的簡化(SimplifIEd data management) -

  分區技術可以讓DBA對數據的管理能力提升。通過優良的分區,DBA可以簡化特定數據操作的執行方式。例如:DBA在對某些分區的內容進行刪除的同時能保證余下­的分區的數據完整性(這是跟對表的數據刪除這種大動作做比較的)。

  此外分區是由MySQL系統直接管理的,DBA不需要手工的去劃分和維護。例如:這個例如沒意思,不講了,如果你是DBA,只要你劃分了分區,以後你就不用管了­就是了。

  站在性能設計的觀點上,俺們對以上的內容也是相當感興趣滴。通過使用分區和對不同的SQL操作的匹配設計,數據庫的性能一定能獲得巨大提升。下面咱們一起用用這­個MySQL 5.1的新功能看看。

  下面所有的測試都在Dell Optiplex box with a Pentium 4 3.00GHz processor, 1GB of RAM機器上(炫耀啊……),Fedora Core 4和MySQL 5.1.6 alpha上運行通過。

  如何進行實際分區,看看分區的實際效果吧。我們建立幾個同樣的MyISAM引擎的表,包含日期敏感的數據,但只對其中一個分區。分區的表(表名為part_tab)我們采用Ran­ge范圍分區模式,通過年份進行分區:


MySQL> 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 );

Query OK, 0 rows affected (0.00 sec)

  注意到了這裡的最後一行嗎?這裡把不屬於前面年度劃分的年份范圍都包含了,這樣才能保證數據不會出錯,大家以後要記住啊,不然數據庫無緣無故出錯你就爽了。那下­面我們建立沒有分區的表(表名為no_part_tab):


MySQL> create table no_part_tab


-> (c1 int(11) default NULL,


-> c2 varchar(30) default NULL,


-> c3 date default NULL) engine=myisam;

Query OK, 0 rows affected (0.02 sec)

 下面咱寫一個存儲過程(感謝Peter Gulutzan給的代碼,如果大家需要Peter Gulutzan的存儲過程教程的中文翻譯也可以跟我要,chenpengyi◎gmail.com),它能向咱剛才建立的已分區的表中平均的向每個分區插入共­8百萬條不同的數據。填滿後,咱就給沒分區的克隆表中插入相同的數據:

MySQL> delimiter //

MySQL> 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

-> //

Query OK, 0 rows affected (0.00 sec)

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