MySQL分割槽的實現方式

hwk_yellow發表於2016-11-16

為什麼要分割槽?

在日常的開發中,我們經常會遇到大表,即資料量達到數百萬條乃至數千萬條的情況。這樣的表過於龐大,以至於在進行查詢、修改的時候耗時太長,效能低下,所以我們需要使用分割槽。

分割槽與分表的區別

分割槽與分表有著不同的地方,主要有以下幾點:

1、分表是將大表分為若干個獨立的小表。而分割槽則是將資料分段劃分後在多個位置存放,其實還是一張表。

2、分表需建立多個表,並且需要按照一定的規則寫入、讀取指定的表。而分割槽只需要一個表名即可。


當然,在實際中,我們可以採用分表、分割槽相結合來提高資料庫的工作效率。


下面介紹一下分割槽的方式:

1、RANGE分割槽

這種模式允許將資料劃分為不同的範圍,例如可以通過年份來劃分,例如:

[php] view plain copy
  1. create table test(   
  2. id int,   
  3. year int  
  4. )engine = myisam  
  5. partition by range(year)(   
  6. partition t0 values less than (1990),  #年份小於1990年的  
  7. partition t1 values less than (2000),  #年份小於2000年大於1990年的  
  8. partition t2 values less than (2010),  #年份小於2010年大於2000年的  
  9. partition t3 values less than maxvalue ); #年份大於2010年的  


2、LIST分割槽

這種模允許系統通過預定義的列表的值來對資料進行劃分,例如:

[php] view plain copy
  1. create table test(   
  2. id int,   
  3. area int  
  4. )engine = myisam  
  5. partition by list(area)(   
  6. partition heilongjiang values in (1,2), #將area為1 2 的分入heilongjiang區  
  7. partition beijing values in (3,4), #將area為3 4 的分入beijing區  
  8. partition shanxi values in (5,6), #將area為 4 6 的分入shanxi區  
  9. partition hebei values in (7,8) #將area為7 8 的分入hebei區  
  10. );  


3、HASH分割槽

這種模式允許系統通過對錶的一列或多列Hash進行計算,最後通過這個Hash碼不同數值對應的資料區域進行分割槽。例如可以通過對一個表的主鍵進行分割槽。

[php] view plain copy
  1. create table test(   
  2. id int,  
  3. name varchar(30)   
  4. )engine=myisam  
  5. partition by hash(id)  
  6. partitions 10; #分幾個區  


4、KEY分割槽

與HASH分割槽類似

[php] view plain copy
  1. create table test(   
  2. id int,  
  3. name varchar(30)  
  4. )engine = myisam  
  5. partition by linear key(id)  
  6. partitions 3; #分幾個區   

相關文章