MySQL 5.5數據庫的多列分區是本文我們主要要介紹的內容,本文我們通過一個實例來介紹這一部分內容,接下來就讓我們一起來看看吧!
多列分區
COLUMNS關鍵字現在允許字符串和日期列作為分區定義列,同時還允許使用多個列定義一個分區,你可能在官方文檔中已經看到了一些例子,如:
- CREATE TABLE p1 (
- a INT,
- b INT,
- c INT
- )
- PARTITION BY RANGE COLUMNS (a,b)
- (
- PARTITION p01 VALUES LESS THAN (10,20),
- PARTITION p02 VALUES LESS THAN (20,30),
- PARTITION p03 VALUES LESS THAN (30,40),
- PARTITION p04 VALUES LESS THAN (40,MAXVALUE),
- PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)
- );
- CREATE TABLE p2 (
- a INT,
- b INT,
- c INT
- )
- PARTITION BY RANGE COLUMNS (a,b)
- (
- PARTITION p01 VALUES LESS THAN (10,10),
- PARTITION p02 VALUES LESS THAN (10,20),
- PARTITION p03 VALUES LESS THAN (10,30),
- PARTITION p04 VALUES LESS THAN (10,MAXVALUE),
- PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)
- )
同樣還有PARTITION BY RANGE COLUMNS (a,b,c)等其它例子。由於我很長時間都在使用MySQL 5.1的分區,我對多列分區的含義不太了解,LESS THAN (10,10)是什麼意思?如果下一個分區是LESS THAN (10,20)會發生什麼?相反,如果是(20,30)又會如何?
所有這些問題都需要一個答案,在回答之前,他們需要更好地理解我們在做什麼。
開始時可能有些混亂,當所有分區有一個不同范圍的值時,實際上,它只是在表的一個列上進行了分區,但事實並非如此,在下面的例子中
- CREATE TABLE p1_single (
- a INT,
- b INT,
- c INT
- )
- PARTITION BY RANGE COLUMNS (a)
- (
- PARTITION p01 VALUES LESS THAN (10),
- PARTITION p02 VALUES LESS THAN (20),
- PARTITION p03 VALUES LESS THAN (30),
- PARTITION p04 VALUES LESS THAN (40),
- PARTITION p05 VALUES LESS THAN (MAXVALUE)
- );
它和前面的表p1不一樣,如果你在表p1中插入10,1,1),它將會進入第一個分區,相反,在表p1_single中,它將會進入第二個分區,其原因是(10,1)小於(10,10),如果你僅僅關注第一個值,你還沒有意識到你在比較一個元組,而不是一個單一的值。
現在我們來分析一下最難懂的地方,當你需要確定某一行應該放在哪裡時會發生什麼?你是如何確定類似(10,9) < (10,10)這種運算的值的?答案其實很簡單,當你對它們進行排序時,使用相同的方法計算兩條記錄的值。
- a=10
- b=9
- (a,b) < (10,10) ?
- # evaluates to:
- (a < 10)
- OR
- ((a = 10) AND ( b < 10))
- # which translates to:
- (10 < 10)
- OR
- ((1010 = 10) AND ( 9 < 10))
如果有三列,表達式會更長,但不會更復雜。你首先在第一個項目上測試小於運算,如果有兩個或更多的分區與之匹配,接著就測試第二個項目,如果不止一個候選分區,那還需要測試第三個項目。
關於MySQL 5.5多列分區的知識就介紹到這裡了,希望本次的介紹能夠對您有所幫助。
原文出處:http://lujia35.iteye.com/blog/718899。