MySQL分區介紹

MySQL分區介紹   
  MySQL的分區技術不同與之前的分表技術,它與水平分表有點類似,但是它是在邏輯層進行的水平分表,對與應用程序而言它還是一張表。   
2.1 MySQL分區類型   
  MySQL5.1有5中分區類型:   
  RANGE 分區:基於屬於一個給定連續區間的列值,把多行分配給分區;   
  LIST 分區:類似於按RANGE分區,區別在於LIST分區是基於列值匹配一個離散值集合中的某個值來進行選擇;  
  HASH分區:基於用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL 中有效的、產生非負整數值的任何表達式。   
  KEY 分區:類似於按HASH分區,區別在於KEY分區只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。   
2.2 RANGE分區   
  對於RANGE分區,舉個例子:   
  例1. 假定你創建了一個如下的一個表,該表保存有20家音像店的職員記錄,這20家音像店的編號從1到20。 如果你想將其分成4個小分區,那麼你可以採用RANGE分區,創建的數據庫表如下:   

 這個例子,它的key是一個整型的數據,那是否對於其它類型的字段就無法作爲key呢?  答案是否定的,例子2說明這種情況。   
  例2. 假定你創建了一個如下的一個表,該表保存有20家音像店的職員記錄,這20家音像店的編號從1到20。你想把不同時期離職的員工進行分別存儲,那麼你可以將日期字段separated(即離職時間)作爲一個key,創建的SQL語句如下:

這樣你就可以對一個日期類型的字段調用mysql的日期函數YEAR()轉換爲一種整數類型,從而可以作爲RANGE分區的key。這個時候,你可以看到,按照分區後的物理文件是相對獨立的:  

可知,每個分區有自己獨立的數據文件和索引文件,這是爲什麼你對某一個查詢,它只會訪問它需要訪問的數據塊,而不訪問根本不是結果的物理塊,從而可以大大提高系統的效率。

2.3 LIST分區  
  LIST分區與RANGE分區有類似的地方,舉個與例1類似的例子如下:  
  例3. 假定你創建了一個如下的一個表,該表保存有20家音像店的職員記錄,這20家音像店的編號從1到20。 而這20個音像店,分佈在4個有經銷權的地區,如下表所示:  
地區 商店ID 號  
北區 3, 5, 6, 9, 17  
東區 1, 2, 10, 11, 19, 20  
西區 4, 12, 13, 14, 18  
中心區 7, 8, 15, 16  
  那麼你可以採用如下的LIST分區語句創建數據表:  

  同樣,它在物理文件上也會標識不同的分區:  

2.4 HASH分區  
  HASH分區主要用來確保數據在預先確定數目的分區中平均分佈。它可以基於用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。  
  例4. 假定你創建了一個如下的一個表,該表保存有20家音像店的職員記錄,這20家音像店的編號從1到20。你想把不同時期加入的員工進行分別存儲,那麼你可以將日期字段hired(即離職時間)作爲一個key,創建的SQL語句如下:

 那麼要插入一個‘2005-09-15’入職的員工E1,那麼按照取模函數會將其放置到第2分區中:  
  MOD(YEAR(‘2005-09-01’), 4)= MOD(2005,4)= 1 //即第2分區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章