MySQL 5.5數(shù)據(jù)庫的多列分區(qū)是本文我們主要要介紹的內(nèi)容,本文我們通過一個(gè)實(shí)例來介紹這一部分內(nèi)容,接下來就讓我們一起來看看吧!
多列分區(qū)
COLUMNS關(guān)鍵字現(xiàn)在允許字符串和日期列作為分區(qū)定義列,同時(shí)還允許使用多個(gè)列定義一個(gè)分區(qū),你可能在官方文檔中已經(jīng)看到了一些例子,如:
- 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)等其它例子。由于我很長時(shí)間都在使用MySQL 5.1的分區(qū),我對多列分區(qū)的含義不太了解,LESS THAN (10,10)是什么意思?如果下一個(gè)分區(qū)是LESS THAN (10,20)會發(fā)生什么?相反,如果是(20,30)又會如何?
所有這些問題都需要一個(gè)答案,在回答之前,他們需要更好地理解我們在做什么。
開始時(shí)可能有些混亂,當(dāng)所有分區(qū)有一個(gè)不同范圍的值時(shí),實(shí)際上,它只是在表的一個(gè)列上進(jìn)行了分區(qū),但事實(shí)并非如此,在下面的例子中
- 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),它將會進(jìn)入第一個(gè)分區(qū),相反,在表p1_single中,它將會進(jìn)入第二個(gè)分區(qū),其原因是(10,1)小于(10,10),如果你僅僅關(guān)注第一個(gè)值,你還沒有意識到你在比較一個(gè)元組,而不是一個(gè)單一的值。
現(xiàn)在我們來分析一下最難懂的地方,當(dāng)你需要確定某一行應(yīng)該放在哪里時(shí)會發(fā)生什么?你是如何確定類似(10,9) < (10,10)這種運(yùn)算的值的?答案其實(shí)很簡單,當(dāng)你對它們進(jìn)行排序時(shí),使用相同的方法計(jì)算兩條記錄的值。
- 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))
如果有三列,表達(dá)式會更長,但不會更復(fù)雜。你首先在第一個(gè)項(xiàng)目上測試小于運(yùn)算,如果有兩個(gè)或更多的分區(qū)與之匹配,接著就測試第二個(gè)項(xiàng)目,如果不止一個(gè)候選分區(qū),那還需要測試第三個(gè)項(xiàng)目。
關(guān)于MySQL 5.5多列分區(qū)的知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>
原文出處:http://lujia35./blog/718899。
【編輯推薦】
- 適合初學(xué)者的MySQL學(xué)習(xí)筆記之管理員常用操作總結(jié)
- 適合初學(xué)者的MySQL學(xué)習(xí)筆記之SELECT語句使用詳解
- MySQL數(shù)據(jù)庫存儲引擎之MyISAM和InnoDB的區(qū)別對比
- 適合初學(xué)者的MySQL學(xué)習(xí)筆記之ORDER BY子句使用詳解
- 適合初學(xué)者的MySQL學(xué)習(xí)筆記之MySQL常用命令操作技巧
【責(zé)任編輯: 趙鵬 TEL:(010)68476606】
|