分區(qū)表

分區(qū)表

概念

表分區(qū)就是將一個(gè)大表按照mysq提供的幾種方式,分成幾個(gè)小表塌西。
日常開(kāi)發(fā)中我們經(jīng)常會(huì)遇到大表的情況,所謂的大表是指存儲(chǔ)了百萬(wàn)級(jí)乃至千萬(wàn)級(jí)條記錄的表。這樣的表過(guò)于龐大,導(dǎo)致數(shù)據(jù)庫(kù)在査詢和插入的時(shí)候耗時(shí)太長(zhǎng)筝尾、性能低下,
如果涉及聯(lián)合查詢的情況,性能會(huì)更加糟糕捡需。對(duì)表進(jìn)行分區(qū),目的就是減少數(shù)據(jù)庫(kù)的負(fù)擔(dān),提高數(shù)據(jù)庫(kù)的效率,通常來(lái)講就是提高表的增刪改查效率。
分區(qū)是將數(shù)據(jù)分段劃分在多個(gè)位置存放,可以是同一塊磁盤(pán)也可以在不同的機(jī)器忿等。
分區(qū)后,表面上還是一張表,但數(shù)據(jù)散列到多個(gè)位置了。應(yīng)用程序讀寫(xiě)的時(shí)候操作的還是大表名字,數(shù)據(jù)庫(kù)系統(tǒng)自動(dòng)去組織分區(qū)的數(shù)據(jù)崔挖。

與單個(gè)磁盤(pán)或文件系統(tǒng)分區(qū)相比,可以存儲(chǔ)更多的數(shù)據(jù)贸街。
很容易就能刪除不用或者過(guò)時(shí)的數(shù)據(jù)。
些查詢可以得到極大的優(yōu)化狸相。
涉及到 SUMO/COUNTO等聚合函數(shù)時(shí),可以并行進(jìn)行薛匪。
IO吞吐量更大。分區(qū)允許可以設(shè)置為任意大小的規(guī)則,跨文件系統(tǒng)分配單個(gè)表的多個(gè)部分脓鹃。
實(shí)際上,表的不同部分在不同的位置被存儲(chǔ)為單獨(dú)的表逸尖。

show plugins; 查看分區(qū)表 partition:ACTIVE

范圍分區(qū)

通常是使用頻率最高的分區(qū),如按月份劃分,這樣的數(shù)據(jù)保持均勻性比較好,如果劃分的均勻性不是很好,需要考慮其他分區(qū)方法。
例如,可以將一個(gè)表通過(guò)年份劃分成兩個(gè)分區(qū),2001-2010年、2011-2020娇跟。

創(chuàng)建分區(qū)表

CREATE TABLE part_tab(
    c1 int default NULL,
    c2 varchar (30) default NULL,
    c3 date default Null
)Engine=INNODB
PARTITION BY RANGE (year(c3))
(
PARTITION p0 VALUES LESS THAN(1995),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (1997),
PARTITION p3 VALUES LESS THAN (1998),
PARTITION p4 VALUES LESS THAN (1999),
PARTITION p5 VALUES LESS THAN (2000),
PARTITION p6 VALUES LESS THAN (2001),
PARTITION p7 VALUES LESS THAN (2002),
PARTITION p8 VALUES LESS THAN (2003),
PARTITION p9 VALUES LESS THAN (2004),
PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE
);

(0 - 1995) 走p0分區(qū) , MAXVALUE 其他數(shù)字走p11分區(qū)

創(chuàng)建普通表

CREATE TABLE no_part_tab(
    c1 int default NULL,
    c2 varchar (30) default NULL,
    c3 date default Null
)Engine=INNODB;

查看分區(qū)表

SELECT
    PARTITION_name,
    PARTITION_expression,
    table_rows
FROM
    information_schema.PARTITIONS 
WHERE
    table_schema = SCHEMA () 
    AND table_name = 'part_tab';

創(chuàng)建函數(shù)插入數(shù)據(jù)

delimiter //
CREATE PROCEDURE load_part_tab()
    begin
    declare v int default 0;
    while v < 1000000
    do
    insert into part_tab values (v, 'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652));
    set v = V + 1;
    end while ;
    end //

# 兩個(gè)表都插入數(shù)據(jù)
call load_part_tab(); 
insert into no_part_tab select * from part_tab;

查詢

select COUNT(*) from part_tab where c3 > date '1990-01-01' and c3 < date '1995-12-31';
select COUNT(*) from no_part_tab where c3 > date '1990-01-01' and c3 < date '1995-12-31';

哈希分區(qū)

如果數(shù)據(jù)不是那么容易進(jìn)行劃分,通過(guò)這種方式就很靈活了岩齿。
可以將數(shù)據(jù)均勻的插入到不同的塊,在并發(fā)時(shí)有利于提高效率,當(dāng)無(wú)法用 Range分區(qū)時(shí),就可以用Hash分區(qū)。

創(chuàng)建哈希分區(qū)

CREATE TABLE hash_tab(
    c1 int default NULL,
    c2 varchar (30) default NULL,
    c3 date default Null
)Engine=INNODB
partition by HASH(YEAR(c3))
PARTITIONS 5;

必須定在主鍵之上苞俘,如果沒(méi)有主鍵定義在唯一鍵列上盹沈,同理不允許為 NULL;

分區(qū)列必須是正整數(shù)int類(lèi)型

列表分區(qū)

當(dāng)需要明確控制如何將數(shù)據(jù)進(jìn)行分區(qū)時(shí),采用這種方式吃谣。
只能進(jìn)行單列分區(qū),可以講數(shù)據(jù)進(jìn)行分組,比如按城市分區(qū),幾個(gè)城市放一起乞封。

創(chuàng)建列表分區(qū)

CREATE TABLE list_tab(
    c1 int default NULL,
    c2 varchar (30) default NULL,
    c3 date default Null
)Engine=INNODB
partition by LIST(YEAR(c3))(
    PARTITION PO VALUES IN (1999,2000,2001),
    PARTITION p1 VALUES IN (2002,2003),
    PARTITION p2 VALUES IN (1995,1996,1997),
    PARTITION p3 VALUES IN (1998,2004)
);

需要注意: 年份要寫(xiě)全否則報(bào)錯(cuò),如果添加了分區(qū)外的年份也會(huì)報(bào)錯(cuò),沒(méi)有像范圍分區(qū)那樣默認(rèn)分區(qū)

復(fù)合分區(qū)

側(cè)重于數(shù)據(jù)歸檔了,將上述三個(gè)組合起來(lái)用。根據(jù)業(yè)務(wù)需求的數(shù)據(jù)分布來(lái)了選擇合適的組合岗憋。
CREATE TABLE fuhe_tab ( id INT , birth_day DATE)
    PARTITION BY RANGE (YEAR(birth_day))
    SUBPARTITION BY HASH(TO_DAYS(birth_day))
    (
        PARTITION P0 VALUES LESS THAN (1990)
        (
            SUBPARTITION S0,
            SUBPARTITION S1
        ),
        PARTITION p1 VALUES LESS THAN (2000)
        (
            SUBPARTITION s2,
            SUBPARTITION S3
        ),
        PARTITION p2 VALUES LESS THAN MAXVALUE
        (
            SUBPARTITION s4,
            SUBPARTITION S5
        )
    );

Subpartitioning 分區(qū)肃晚;(子分區(qū))

刪除分區(qū)表

ALTER TABLE part_tab DROP PARTITION p0;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仔戈,隨后出現(xiàn)的幾起案子关串,更是在濱河造成了極大的恐慌,老刑警劉巖杂穷,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悍缠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耐量,警方通過(guò)查閱死者的電腦和手機(jī)飞蚓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)廊蜒,“玉大人趴拧,你說(shuō)我怎么就攤上這事∩蕉#” “怎么了著榴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)屁倔。 經(jīng)常有香客問(wèn)我脑又,道長(zhǎng),這世上最難降的妖魔是什么锐借? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任问麸,我火速辦了婚禮,結(jié)果婚禮上钞翔,老公的妹妹穿的比我還像新娘严卖。我一直安慰自己,他們只是感情好布轿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布哮笆。 她就那樣靜靜地躺著来颤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稠肘。 梳的紋絲不亂的頭發(fā)上福铅,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音启具,去河邊找鬼本讥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鲁冯,可吹牛的內(nèi)容都是我干的拷沸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼薯演,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撞芍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起跨扮,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤序无,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后衡创,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帝嗡,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年璃氢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哟玷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡一也,死狀恐怖巢寡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椰苟,我是刑警寧澤抑月,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站舆蝴,受9級(jí)特大地震影響谦絮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洁仗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一层皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧京痢,春花似錦奶甘、人聲如沸篷店。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至方淤,卻和暖如春钉赁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背携茂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工你踩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讳苦。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓带膜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸳谜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膝藕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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