(6)大表優(yōu)化—MySQL表的四種分區(qū)類型(3)

面試問題:

1)什么場景,應(yīng)該用什么分區(qū)策略涯鲁?

2)怎么選擇分區(qū)字段和相關(guān)算法?

3)怎么解決不均勻和擴(kuò)容問題有序?

跨磁盤分散查詢抹腿,更大查詢吞吐量

如SUM()和COUNT()聚合函數(shù)查詢旭寿,容易并行處理警绩。 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”盅称。查詢可在每個分區(qū)上同時進(jìn)行肩祥,總計所有分區(qū)得結(jié)果。

分區(qū)類型:RANGE缩膝、LIST混狠、HASH、KEY

一疾层、RANGE分區(qū)

基于屬于一個給定連續(xù)區(qū)間列值将饺,多行分配給分區(qū)。

區(qū)間要連續(xù)且不重疊痛黎,用VALUES LESS THAN操作符定義予弧。實例:

1到5雇員P0中,6到10P1中湖饱,PARTITION BY RANGE 語法要求桌肴;按順序定義,從低到高琉历。(72, ‘Michael’, ‘Widenius’, ’1998-06-25′, NULL, 13)新行插入到p2坠七,

增加21商店錯誤。 CREATE TABLE用“catchall” VALUES LESS THAN子句旗笔,提供給大于明確指定最高值:MAXVALUE最大可能整數(shù)值

基于雇員的工作代碼分表彪置,job_code 列值的連續(xù)區(qū)間。2位數(shù)字:普通工人蝇恶,3數(shù)字:辦公室和支持人員拳魁,4數(shù)字:管理層

基于每個雇員離開公司的年份來分割表,YEAR(separated)

1991年前雇傭p0中撮弧,1991到1995年p1中潘懊, 1996到2000年p2中姚糊,2000年后p3中。

適用場景:

1)刪除一個分區(qū)上的“舊的”數(shù)據(jù)時,只刪除分區(qū)即可授舟。DELETE FROM employees WHERE YEAR (separated) <= 1990

2)包含有日期或時間值救恨,包含有從一些其他級數(shù)開始增長的值的列。

3)經(jīng)常運行直接依賴于用于分割表的列的查詢释树。如”SELECT COUNT(*) FROM employees WHERE YEAR(separated) = 2000 GROUP BY store_id;”迅速地確定只有分區(qū)p2掃描

二肠槽、LIST分區(qū)

類RANGE分區(qū),基于列值匹配一個離散值集合中的某個值

(1)“PARTITION BY LIST(expr)”來實現(xiàn)奢啥,其中“expr”是某列值或一個基于某個列值秸仙、并返回整數(shù)值的表達(dá)式,VALUES IN (value_list)定義分區(qū)桩盲,value_list逗號分隔整數(shù)列表寂纪。

(2)?西區(qū)的所有音像店都賣了:“ALTER TABLE employees DROP PARTITION pWest;”相同作用DELETE(刪除)查詢“DELETE query DELETE FROM employees WHERE store_id IN (4,12,13,14,18)赌结;”有效得多弊攘。

(3) LIST沒有“VALUES LESS?THAN MAXVALUE”要匹配的任何值都必須在值列表中找到。

INSERT INTO employees VALUES(224, 'Linus', 'Torvalds', '2002-05-01', '2004-10-12', 42, 21);“store_id”列值21不能在用于定義分區(qū)pNorth, pEast, pWest,或pCentral的值列表中找到姑曙。

(4)??與其他三種生成復(fù)合的子分區(qū)

三襟交、HASH分區(qū)

“PARTITION BY HASH (expr)”,“expr”返回一個整數(shù)表達(dá)式伤靠。很可能需要再添加“PARTITIONS num”子句捣域,num是非負(fù)整數(shù),表示要被分割成分區(qū)數(shù)量

沒有PARTITIONS子句宴合,分區(qū)默認(rèn)為1焕梅。NDB Cluster(簇)表,默認(rèn)分區(qū)數(shù)將與簇數(shù)據(jù)節(jié)點數(shù)量相同卦洽,這種修正可能是考慮任何MAX_ROWS設(shè)置贞言,確保所有的行都能合適地插入分區(qū)中。

用HASH函數(shù)對createtime日期進(jìn)行HASH運算阀蒂,根據(jù)日期來分區(qū)數(shù)據(jù)该窗,10個分區(qū)。

LINER HASH

支持線性哈希功能蚤霞,與常規(guī)區(qū)別酗失,用線性2冪(powers-of-two)運算法則,常規(guī)哈希用模數(shù)昧绣。語法上區(qū)別“PARTITION BY”子句中添加“LINEAR”關(guān)鍵字规肴。

表達(dá)式expr,保存到分區(qū)num 個分區(qū)中的分區(qū)N,其中N是根據(jù)下面的算法得到:?

1. 大于num拖刃、2的冪删壮,稱為V?

2. V = POWER(2, CEILING(LOG(2, num))) (如,假定num是13兑牡。LOG(2,13)就是3.7004397181411央碟。 CEILING(3.7004397181411)就是4,則V = POWER(2,4), 即等于16)发绢。?

3. 設(shè)置 N = F(column_list) & (V – 1).?

4.??? 當(dāng) N >= num: · ?設(shè)置 V = CEIL(V / 2) · ?設(shè)置 N = N & (V – 1)?

例如,假設(shè)表t1垄琐,使用線性哈希分區(qū)且有4個分區(qū)边酒,是通過下面的語句創(chuàng)建的: CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH( YEAR(col3) ) PARTITIONS 6; 現(xiàn)在假設(shè)要插入兩行記錄到表t1中,其中一條記錄col3列值為’2003-04-14′狸窘,另一條記錄col3列值為’1998-10-19′墩朦。第一條記錄將要保存到的分區(qū)確定如下: V = POWER(2, CEILING(LOG(2,7))) = 8 N = YEAR(’2003-04-14′) & (8 – 1) ?? = 2003 & 7 ?? = 3 (3 >= 6 為假(FALSE): 記錄將被保存到#3號分區(qū)中) 第二條記錄將要保存到的分區(qū)序號計算如下: V = 8 N = YEAR(’1998-10-19′) & (8-1) ? = 1998 & 7 ? = 6 (6 >= 4 為真(TRUE): 還需要附加的步驟) N = 6 & CEILING(5 / 2) ? = 6 & 3 ? = 2 ? (2 >= 4 為假(FALSE): 記錄將被保存到#2分區(qū)中) 按照線性哈希分區(qū)的優(yōu)點在于增加、刪除翻擒、合并和拆分分區(qū)將變得更加快捷氓涣,有利于處理含有極其大量(1000吉)數(shù)據(jù)的表。

缺點:分布不均衡陋气。

四劳吠、KEY分區(qū)

用的少,知道怎么用即可巩趁。

類似HASH分區(qū)痒玩,區(qū)別:KEY分區(qū)只支持計算一列或多,且MySQL服務(wù)器提供其自身的哈希函數(shù)议慰。必須有一列或多列包含整數(shù)值蠢古。

KEY分區(qū)中使用關(guān)鍵字LINEAR和在HASH分區(qū)中使用具有同樣作用,分區(qū)編號是通過2的冪(powers-of-two)算法得到别凹,不是通過模數(shù)算法草讶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炉菲,隨后出現(xiàn)的幾起案子堕战,更是在濱河造成了極大的恐慌,老刑警劉巖拍霜,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件践啄,死亡現(xiàn)場離奇詭異,居然都是意外死亡沉御,警方通過查閱死者的電腦和手機(jī)屿讽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伐谈,你說我怎么就攤上這事烂完。” “怎么了诵棵?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵抠蚣,是天一觀的道長。 經(jīng)常有香客問我履澳,道長嘶窄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任距贷,我火速辦了婚禮柄冲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忠蝗。我一直安慰自己现横,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布阁最。 她就那樣靜靜地躺著戒祠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪速种。 梳的紋絲不亂的頭發(fā)上姜盈,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音配阵,去河邊找鬼贩据。 笑死,一個胖子當(dāng)著我的面吹牛闸餐,可吹牛的內(nèi)容都是我干的饱亮。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼舍沙,長吁一口氣:“原來是場噩夢啊……” “哼近上!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拂铡,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤壹无,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后感帅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斗锭,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年失球,在試婚紗的時候發(fā)現(xiàn)自己被綠了岖是。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帮毁。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖豺撑,靈堂內(nèi)的尸體忽然破棺而出烈疚,到底是詐尸還是另有隱情,我是刑警寧澤聪轿,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布爷肝,位于F島的核電站,受9級特大地震影響陆错,放射性物質(zhì)發(fā)生泄漏灯抛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一音瓷、第九天 我趴在偏房一處隱蔽的房頂上張望对嚼。 院中可真熱鬧,春花似錦外莲、人聲如沸猪半。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沽甥,卻和暖如春声邦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摆舟。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工亥曹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恨诱。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓媳瞪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親照宝。 傳聞我的和親對象是個殘疾皇子蛇受,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 摘要:MySQL分區(qū)表概述 隨著MySQL越來越流行,Mysql里面的保存的數(shù)據(jù)也越來越大厕鹃。在日常的工作中兢仰,我們經(jīng)...
    暖夏未眠丶閱讀 420評論 0 1
  • 一,什么是數(shù)據(jù)庫分區(qū)前段時間寫過一篇關(guān)于mysql分表的的文章剂碴,下面來說一下什么是數(shù)據(jù)庫分區(qū)把将,以mysql為例。m...
    MrKai平凡之路閱讀 1,160評論 0 5
  • mysql分區(qū) Mysql支持水平分區(qū)忆矛,并不支持垂直分區(qū);水平分區(qū):指將同一表中不同行的記錄分配到不同的物理文件中...
    Gundy_閱讀 892評論 0 2
  • 廢話少說察蹲,直接講分區(qū)語法。 Oracle表分區(qū)分為四種:范圍分區(qū),散列分區(qū)递览,列表分區(qū)和復(fù)合分區(qū)叼屠。 一:范圍分區(qū) 就...
    明明德撩碼閱讀 1,037評論 0 3
  • 1.A simple master-to-slave replication is currently being...
    Kevin關(guān)大大閱讀 5,955評論 0 3