程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 5.5 分區之多列分區詳解

MySQL 5.5 分區之多列分區詳解

編輯:MySQL綜合教程

MySQL 5.5數據庫的多列分區是本文我們主要要介紹的內容,本文我們通過一個實例來介紹這一部分內容,接下來就讓我們一起來看看吧!

多列分區

COLUMNS關鍵字現在允許字符串和日期列作為分區定義列,同時還允許使用多個列定義一個分區,你可能在官方文檔中已經看到了一些例子,如: 

  1. CREATE TABLE p1 (    
  2.   a INT,    
  3.   b INT,    
  4.   c INT   
  5. )    
  6. PARTITION BY RANGE COLUMNS (a,b)    
  7. (    
  8.   PARTITION p01 VALUES LESS THAN (10,20),    
  9.   PARTITION p02 VALUES LESS THAN (20,30),    
  10.   PARTITION p03 VALUES LESS THAN (30,40),    
  11.   PARTITION p04 VALUES LESS THAN (40,MAXVALUE),    
  12.   PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)    
  13. );    
  14.  
  15. CREATE TABLE p2 (    
  16.   a INT,    
  17.   b INT,    
  18.   c INT   
  19. )    
  20. PARTITION BY RANGE COLUMNS (a,b)    
  21. (    
  22.   PARTITION p01 VALUES LESS THAN (10,10),    
  23.   PARTITION p02 VALUES LESS THAN (10,20),    
  24.   PARTITION p03 VALUES LESS THAN (10,30),    
  25.   PARTITION p04 VALUES LESS THAN (10,MAXVALUE),    
  26.   PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)    
  27. )  

同樣還有PARTITION BY RANGE COLUMNS (a,b,c)等其它例子。由於我很長時間都在使用MySQL 5.1的分區,我對多列分區的含義不太了解,LESS THAN (10,10)是什麼意思?如果下一個分區是LESS THAN (10,20)會發生什麼?相反,如果是(20,30)又會如何?

所有這些問題都需要一個答案,在回答之前,他們需要更好地理解我們在做什麼。

開始時可能有些混亂,當所有分區有一個不同范圍的值時,實際上,它只是在表的一個列上進行了分區,但事實並非如此,在下面的例子中

  1. CREATE TABLE p1_single (    
  2.   a INT,    
  3.   b INT,    
  4.   c INT   
  5. )    
  6. PARTITION BY RANGE COLUMNS (a)    
  7. (    
  8.   PARTITION p01 VALUES LESS THAN (10),    
  9.   PARTITION p02 VALUES LESS THAN (20),    
  10.   PARTITION p03 VALUES LESS THAN (30),    
  11.   PARTITION p04 VALUES LESS THAN (40),    
  12.   PARTITION p05 VALUES LESS THAN (MAXVALUE)    
  13. );  

它和前面的表p1不一樣,如果你在表p1中插入10,1,1),它將會進入第一個分區,相反,在表p1_single中,它將會進入第二個分區,其原因是(10,1)小於(10,10),如果你僅僅關注第一個值,你還沒有意識到你在比較一個元組,而不是一個單一的值。

現在我們來分析一下最難懂的地方,當你需要確定某一行應該放在哪裡時會發生什麼?你是如何確定類似(10,9) < (10,10)這種運算的值的?答案其實很簡單,當你對它們進行排序時,使用相同的方法計算兩條記錄的值。

  1. a=10    
  2. b=9    
  3. (a,b) < (10,10) ?    
  4. # evaluates to:    
  5. (a < 10)    
  6. OR   
  7. ((a = 10) AND ( b < 10))    
  8. # which translates to:    
  9. (10 < 10)    
  10. OR   
  11. ((1010 = 10) AND ( 9 < 10))  

如果有三列,表達式會更長,但不會更復雜。你首先在第一個項目上測試小於運算,如果有兩個或更多的分區與之匹配,接著就測試第二個項目,如果不止一個候選分區,那還需要測試第三個項目。

關於MySQL 5.5多列分區的知識就介紹到這裡了,希望本次的介紹能夠對您有所幫助。

原文出處:http://lujia35.iteye.com/blog/718899。

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