MySQL 5.5 分區(qū)之多列分區(qū)詳解
MySQL 5.5數(shù)據(jù)庫(kù)的多列分區(qū)是本文我們主要要介紹的內(nèi)容,本文我們通過(guò)一個(gè)實(shí)例來(lái)介紹這一部分內(nèi)容,接下來(lái)就讓我們一起來(lá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)等其它例子。由于我很長(zhǎng)時(shí)間都在使用MySQL 5.1的分區(qū),我對(duì)多列分區(qū)的含義不太了解,LESS THAN (10,10)是什么意思?如果下一個(gè)分區(qū)是LESS THAN (10,20)會(huì)發(fā)生什么?相反,如果是(20,30)又會(huì)如何?
所有這些問(wèn)題都需要一個(gè)答案,在回答之前,他們需要更好地理解我們?cè)谧鍪裁础?/p>
開(kāi)始時(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),它將會(huì)進(jìn)入第一個(gè)分區(qū),相反,在表p1_single中,它將會(huì)進(jìn)入第二個(gè)分區(qū),其原因是(10,1)小于(10,10),如果你僅僅關(guān)注第一個(gè)值,你還沒(méi)有意識(shí)到你在比較一個(gè)元組,而不是一個(gè)單一的值。
現(xiàn)在我們來(lái)分析一下最難懂的地方,當(dāng)你需要確定某一行應(yīng)該放在哪里時(shí)會(huì)發(fā)生什么?你是如何確定類(lèi)似(10,9) < (10,10)這種運(yùn)算的值的?答案其實(shí)很簡(jiǎn)單,當(dāng)你對(duì)它們進(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á)式會(huì)更長(zhǎng),但不會(huì)更復(fù)雜。你首先在第一個(gè)項(xiàng)目上測(cè)試小于運(yùn)算,如果有兩個(gè)或更多的分區(qū)與之匹配,接著就測(cè)試第二個(gè)項(xiàng)目,如果不止一個(gè)候選分區(qū),那還需要測(cè)試第三個(gè)項(xiàng)目。
關(guān)于MySQL 5.5多列分區(qū)的知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>
原文出處:http://lujia35.iteye.com/blog/718899。
【編輯推薦】






