當(dāng)數(shù)據(jù)表中的數(shù)據(jù)量很大時(shí),分區(qū)帶來的效率提升才會(huì)顯現(xiàn)出來。
威寧網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
只有檢索字段為分區(qū)字段時(shí),分區(qū)帶來的效率提升才會(huì)比較明顯。因此, 分區(qū)字段的選擇很重要 ,并且 業(yè)務(wù)邏輯要盡可能地根據(jù)分區(qū)字段做相應(yīng)調(diào)整 (盡量使用分區(qū)字段作為查詢條件)。
1、分區(qū)表對(duì)業(yè)務(wù)透明,只需要維護(hù)一個(gè)表的數(shù)據(jù)結(jié)構(gòu)。
2、DML操作加鎖僅影響操作的分區(qū),不會(huì)影響未訪問分區(qū)。
3、通過分區(qū)交換快速將數(shù)據(jù)換入和換出分區(qū)表。
4、通過TRUNCATE操作快速清理特定分區(qū)數(shù)據(jù)。
5、通過強(qiáng)制分區(qū)僅訪問特定分區(qū)數(shù)據(jù),減少操作影響。
6、通過大數(shù)據(jù)量分區(qū)能有效降低索引層數(shù),提高查詢性能。
1、創(chuàng)建表時(shí)指定分區(qū)
物理文件:
2、插入數(shù)據(jù)
3、查詢 information_schema.partitions 表得到該表的分區(qū)信息
4、查詢計(jì)劃分析
5、添加分區(qū)
若報(bào)錯(cuò):
6、修改/覆蓋/合并分區(qū)
報(bào)錯(cuò)
所以需要添加pmax 分區(qū),一同修改
7、刪除分區(qū)
8、查詢具體分區(qū)的下數(shù)據(jù)
MySQL分區(qū)的限制
??表分區(qū)是將?個(gè)表的數(shù)據(jù)按照?定的規(guī)則?平劃分為不同的邏輯塊,并分別進(jìn)?物理存儲(chǔ),這個(gè)規(guī)則就叫做分區(qū)函數(shù),可以有不同的分區(qū)規(guī)則。5.7可以通過show plugins語句查看當(dāng)前MySQL是否?持表分區(qū)功能。
??但當(dāng)表中含有主鍵或唯?鍵時(shí),則每個(gè)被?作 分區(qū)函數(shù)的字段必須是表中唯?鍵和主鍵的全部或?部分 ,否則就?法創(chuàng)建分區(qū)表。?如下?的表由于唯?鍵和主鍵沒有相同的字段,所以?法創(chuàng)建表分區(qū)
上述例?中刪除唯?鍵,確保主鍵中的字段包含分區(qū)函數(shù)中的所有字段,創(chuàng)建成功
或者將主鍵擴(kuò)展為包含ref字段
表分區(qū)的主要優(yōu)勢在于:
??可以允許在?個(gè)表?存儲(chǔ)更多的數(shù)據(jù),突破磁盤限制或者?件系統(tǒng)限制
??對(duì)于從表?將過期或歷史的數(shù)據(jù)移除在表分區(qū)很容易實(shí)現(xiàn),只要將對(duì)應(yīng)的分區(qū)移除即可
??對(duì)某些查詢和修改語句來說,可以 ?動(dòng) 將數(shù)據(jù)范圍縮?到?個(gè)或?個(gè)表分區(qū)上,優(yōu)化語句執(zhí)?效率。?且可以通過 顯示指定表分區(qū) 來執(zhí)?語句,?如 SELECT * FROM t PARTITION (p0,p1) WHERE c 5
表分區(qū)類型分為:
范圍表分區(qū),按照?定的范圍值來確定每個(gè)分區(qū)包含的數(shù)據(jù),分區(qū)函數(shù)使?的字段必須只能是 整數(shù)類型,分區(qū)的定義范圍必須是連續(xù)的,且不能有重疊部分,通過使?VALUES LESS THAN來定義分區(qū)范圍,表分區(qū)的范圍定義是從?到?定義的
?如:
??Store_id6的數(shù)據(jù)被放在p0分區(qū)?,6=store_id10之間的數(shù)據(jù)被放在p1分區(qū)?,以此類推,當(dāng)新插?的數(shù)據(jù)為(72, ‘Mitchell’, ‘Wilson’, ‘1998-06-25’, NULL, 13) 時(shí),則新數(shù)據(jù)被插?到p2分區(qū)?,但當(dāng)插?的數(shù)據(jù)的store_id為21時(shí),由于沒有分區(qū)去容納此數(shù)據(jù),所以會(huì)報(bào)錯(cuò),我們需要修改?下表的定義
報(bào)錯(cuò):
修改表的定義:
?? MAXVALUE關(guān)鍵詞的作?是表示可能的最?值,所以任何store_id=16的數(shù)據(jù)都會(huì)被寫?到p3分區(qū)?。分區(qū)函數(shù)中也可以使?表達(dá)式 ,?如:
?? 對(duì)timestamp字段類型可以使?的表達(dá)式?前僅有unix_timestamp ,其他的表達(dá)式都不允許
列表表分區(qū),按照?個(gè)?個(gè)確定的值來確定每個(gè)分區(qū)包含的數(shù)據(jù),通過PARTITION BY LIST(expr)分區(qū)函數(shù)表達(dá)式必須返回整數(shù),取值范圍通過VALUES IN (value_list)定義
對(duì)List表分區(qū)來說,沒有MAXVALUE特殊值,所有的可能取值都需要再VALUES IN中包含,如果有未定義的取值則會(huì)報(bào)錯(cuò)
同樣,當(dāng)有主鍵或者唯?鍵存在的情況下,分區(qū)函數(shù)字段需要包含在主鍵或唯?鍵中
對(duì)range和list表分區(qū)來說,分區(qū)函數(shù)可以包含多個(gè)字段,分區(qū)多字段函數(shù)(column partition) 所涉及的字段類型可以包括:
范圍多字段分區(qū)函數(shù)與普通的范圍分區(qū)函數(shù)的區(qū)別在于:
a) 字段類型多樣化
b) 范圍多字段分區(qū)函數(shù) 不?持表達(dá)式,只能?字段名
c) 范圍多字段分區(qū)函數(shù)?持?個(gè)或多個(gè)字段
再?如創(chuàng)建如下的表分區(qū):
對(duì)多列對(duì)?來說:
當(dāng)然只要保證取值范圍是增?的,表分區(qū)就能創(chuàng)建成功,?如:
但如果 取值范圍不是增?的,就會(huì)返回錯(cuò)誤 :
對(duì)其他數(shù)據(jù)類型的?持:
list列表多字段表分區(qū),例如:你有一個(gè)在12個(gè)城市客戶的業(yè)務(wù), 為了銷售和市場的目的, 你的組織每3個(gè)城市劃分為一個(gè)區(qū)域針對(duì)LIST COLUMNS分區(qū), 你可以基于城市的名稱創(chuàng)建一個(gè)客戶數(shù)據(jù)表并聲明4個(gè)分區(qū)當(dāng)你的客戶在對(duì)應(yīng)的這個(gè)區(qū)域:
使用日期分區(qū)
但是這種情況在日期增長到非常大的時(shí)候是很復(fù)雜的, 所以這種還是使用RANGE 分區(qū)方式比較好
??按照?個(gè)?定義的函數(shù)返回值來確定每個(gè)分區(qū)包含的數(shù)據(jù),這個(gè) ?定義函數(shù)也可以僅僅是?個(gè)字段名字
??通過PARTITION BY HASH (expr)?句來表達(dá)哈希表分區(qū),其中的 expr表達(dá)式必須返回?個(gè)整數(shù),基于分區(qū)個(gè)數(shù)的取模(%)運(yùn)算。根據(jù)余數(shù)插?到指定的分區(qū)
??對(duì)哈希表分區(qū)來說只需要定義分區(qū)的個(gè)數(shù),其他的事情由內(nèi)部完成
如果沒有寫明PARTITIONS字段,則默認(rèn)為1,表達(dá)式可以是整數(shù)類型字段,也可以是?個(gè)函數(shù),?如
?如: CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY HASH( YEAR(col3) ) PARTITIONS 4;
如果插??條數(shù)據(jù)對(duì)應(yīng)的col3為‘2005-09-15’時(shí),則插?數(shù)據(jù)的分區(qū)計(jì)算?法為:
??與哈希表分區(qū)類似,只不過哈希表分區(qū)依賴于?定義的函數(shù),?key表分區(qū)的哈希算法是依賴MySQL本身, CREATE TABLE ... PARTITION BY KEY () 創(chuàng)建key表分區(qū), 括號(hào)??可以包含0個(gè)或者多個(gè)字段,所引?的字段必須是主鍵或者主鍵的?部分 ,如果括號(hào)??沒有字段,則代表使?主鍵
如果表中沒有主鍵但有唯?鍵,則使?唯?鍵,但 唯?鍵字段必須定義為not null ,否則報(bào)錯(cuò)
所引?的字段未必必須是整數(shù)類型,其他的類型也可以使?,?如:
?表分區(qū),是在表分區(qū)的基礎(chǔ)上再創(chuàng)建表分區(qū)的概念, 每個(gè)表分區(qū)下的?表分區(qū)個(gè)數(shù)必須?致 ,?如:
ts表擁有三個(gè)范圍分區(qū),同時(shí)每個(gè)分區(qū)都各?有兩個(gè)?分區(qū),所以總共有6個(gè)分區(qū)
?表分區(qū)必須是范圍/列表分區(qū)+哈希/key?表分區(qū)的組合
?表分區(qū)也可以顯示的指定?表分區(qū)的名字,?如:
不同的表分區(qū)對(duì)NULL值的處理?式不同
對(duì)范圍表分區(qū)來說,如果插?的是NULL值,則將數(shù)據(jù)放到最?的分區(qū)表?
對(duì)list表分區(qū)來說,?持NULL值的唯?情況就是某個(gè)分區(qū)的允許值中包含NULL
對(duì)哈希表分區(qū)和Key表分區(qū)來說,NULL值會(huì)被當(dāng)成0值對(duì)待
通過alter table命令可以執(zhí)?增加,刪除,重新定義,合并或者拆分表分區(qū)的管理動(dòng)作
對(duì)范圍表分區(qū)和列表表分區(qū)來說,刪除?個(gè)表分區(qū)命令如下:
刪除表分區(qū)的動(dòng)作不光會(huì)把分區(qū)刪掉,也會(huì)把表分區(qū)?原來的數(shù)據(jù)給刪除掉
在原分區(qū)上增加?個(gè)表分區(qū)可以通過alter table … add partition語句來完成
但對(duì)范圍表分區(qū)來說,增加的表分區(qū)必須在尾部增加,在頭部或者在中間增加都會(huì)失?。?/p>
為解決這個(gè)問題,可以使? REORGANIZE 命令:
對(duì)列表表分區(qū)來說,只要新增加的分區(qū)對(duì)應(yīng)的值在之前的表分區(qū)中沒有出現(xiàn)過,就可以通過alter table… add partition來增加
當(dāng)然, 也可以通過REORGANIZE命令將之前的多個(gè)分區(qū)合并成?個(gè)或?個(gè)分區(qū),但要保持分區(qū)值?致:
更復(fù)雜的?如將多個(gè)分區(qū)重組成多個(gè)分區(qū):
需要指定的每個(gè)分區(qū)數(shù)據(jù)的存儲(chǔ)條件。分區(qū)的字段一定要是主鍵!按照生日中的月份,分成春夏秋冬四個(gè)分區(qū)。
下面新建一個(gè)list_1表,
分區(qū)創(chuàng)建成功之后,查看文件信息
注意:chun和dong兩個(gè)分區(qū),分別放入了數(shù)據(jù).這就說明我們的分區(qū)生效了.
1 list分區(qū)就是根據(jù)分區(qū)條件,將數(shù)據(jù)分為若干區(qū),也會(huì)生成相應(yīng)的數(shù)據(jù)文件.
2 這個(gè)list()中也可以直接指定字段,但是這個(gè)字段一定要是整數(shù).
網(wǎng)頁名稱:mysql分區(qū)怎么設(shè)置,mysql怎么建分區(qū)表
路徑分享:http://m.kartarina.com/article28/hddjcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、小程序開發(fā)、網(wǎng)站改版、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)