真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql怎么對表做分區(qū) mysql數(shù)據(jù)表分區(qū)

Mysql按時(shí)間進(jìn)行表分區(qū)

以下是創(chuàng)建一張測試表TEST并且按照時(shí)間CREATE_TIME創(chuàng)建RANGE分區(qū),并使用ID創(chuàng)建hash分區(qū),組成復(fù)合分區(qū)。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東港網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東港網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東港地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

CREATE TABLE TEST (

CREATE_TIME DATETIME DEFAULT NULL, ID BIGINT(15) DEFAULT NULL

) ENGINE=INNODB DEFAULT CHARSET=utf8

PARTITION BY RANGE(TO_DAYS(CREATE_TIME)) PARTITIONS 7 SUBPARTITION BY HASH(ID) SUBPARTITIONS 16

(PARTITION P1710 VALUES LESS THAN (TO_DAYS ('2017-10-01'))

(SUBPARTITION P1710sp0 ,SUBPARTITION P1710sp1 ,

SUBPARTITION P1710sp2 ,SUBPARTITION P1710sp3 ,

SUBPARTITION P1710sp4 ,SUBPARTITION P1710sp5 ,

SUBPARTITION P1710sp6 ,SUBPARTITION P1710sp7 ,

SUBPARTITION P1710sp8 ,SUBPARTITION P1710sp9 ,

SUBPARTITION P1710sp10 ,SUBPARTITION P1710sp11 ,

SUBPARTITION P1710sp12 ,SUBPARTITION P1710sp13 ,

SUBPARTITION P1710sp14 ,SUBPARTITION P1710sp15 ),

PARTITION P1711 VALUES LESS THAN (TO_DAYS ('2017-11-01'))

(SUBPARTITION P1711sp0 ,SUBPARTITION P1711sp1 ,

SUBPARTITION P1711sp2 , SUBPARTITION P1711sp3 ,

SUBPARTITION P1711sp4 , SUBPARTITION P1711sp5 ,

SUBPARTITION P1711sp6 , SUBPARTITION P1711sp7 ,

SUBPARTITION P1711sp8 , SUBPARTITION P1711sp9 ,

SUBPARTITION P1711sp10 , SUBPARTITION P1711sp11 ,

SUBPARTITION P1711sp12 , SUBPARTITION P1711sp13 ,

SUBPARTITION P1711sp14 , SUBPARTITION P1711sp15 ),

十、MySQL表分區(qū)

??表分區(qū)是將?個(gè)表的數(shù)據(jù)按照?定的規(guī)則?平劃分為不同的邏輯塊,并分別進(jìn)?物理存儲,這個(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è)表?存儲更多的數(shù)據(jù),突破磁盤限制或者?件系統(tǒng)限制

??對于從表?將過期或歷史的數(shù)據(jù)移除在表分區(qū)很容易實(shí)現(xiàn),只要將對應(yīng)的分區(qū)移除即可

??對某些查詢和修改語句來說,可以 ?動 將數(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ù),所以會報(bào)錯(cuò),我們需要修改?下表的定義

報(bào)錯(cuò):

修改表的定義:

?? MAXVALUE關(guān)鍵詞的作?是表示可能的最?值,所以任何store_id=16的數(shù)據(jù)都會被寫?到p3分區(qū)?。分區(qū)函數(shù)中也可以使?表達(dá)式 ,?如:

?? 對timestamp字段類型可以使?的表達(dá)式?前僅有unix_timestamp ,其他的表達(dá)式都不允許

列表表分區(qū),按照?個(gè)?個(gè)確定的值來確定每個(gè)分區(qū)包含的數(shù)據(jù),通過PARTITION BY LIST(expr)分區(qū)函數(shù)表達(dá)式必須返回整數(shù),取值范圍通過VALUES IN (value_list)定義

對List表分區(qū)來說,沒有MAXVALUE特殊值,所有的可能取值都需要再VALUES IN中包含,如果有未定義的取值則會報(bào)錯(cuò)

同樣,當(dāng)有主鍵或者唯?鍵存在的情況下,分區(qū)函數(shù)字段需要包含在主鍵或唯?鍵中

對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ū):

對多列對?來說:

當(dāng)然只要保證取值范圍是增?的,表分區(qū)就能創(chuàng)建成功,?如:

但如果 取值范圍不是增?的,就會返回錯(cuò)誤 :

對其他數(shù)據(jù)類型的?持:

list列表多字段表分區(qū),例如:你有一個(gè)在12個(gè)城市客戶的業(yè)務(wù), 為了銷售和市場的目的, 你的組織每3個(gè)城市劃分為一個(gè)區(qū)域針對LIST COLUMNS分區(qū), 你可以基于城市的名稱創(chuàng)建一個(gè)客戶數(shù)據(jù)表并聲明4個(gè)分區(qū)當(dāng)你的客戶在對應(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ū)

??對哈希表分區(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ù)對應(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ū), 括號??可以包含0個(gè)或者多個(gè)字段,所引?的字段必須是主鍵或者主鍵的?部分 ,如果括號??沒有字段,則代表使?主鍵

如果表中沒有主鍵但有唯?鍵,則使?唯?鍵,但 唯?鍵字段必須定義為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ū)對NULL值的處理?式不同

對范圍表分區(qū)來說,如果插?的是NULL值,則將數(shù)據(jù)放到最?的分區(qū)表?

對list表分區(qū)來說,?持NULL值的唯?情況就是某個(gè)分區(qū)的允許值中包含NULL

對哈希表分區(qū)和Key表分區(qū)來說,NULL值會被當(dāng)成0值對待

通過alter table命令可以執(zhí)?增加,刪除,重新定義,合并或者拆分表分區(qū)的管理動作

對范圍表分區(qū)和列表表分區(qū)來說,刪除?個(gè)表分區(qū)命令如下:

刪除表分區(qū)的動作不光會把分區(qū)刪掉,也會把表分區(qū)?原來的數(shù)據(jù)給刪除掉

在原分區(qū)上增加?個(gè)表分區(qū)可以通過alter table … add partition語句來完成

但對范圍表分區(qū)來說,增加的表分區(qū)必須在尾部增加,在頭部或者在中間增加都會失?。?/p>

為解決這個(gè)問題,可以使? REORGANIZE 命令:

對列表表分區(qū)來說,只要新增加的分區(qū)對應(yīng)的值在之前的表分區(qū)中沒有出現(xiàn)過,就可以通過alter table… add partition來增加

當(dāng)然, 也可以通過REORGANIZE命令將之前的多個(gè)分區(qū)合并成?個(gè)或?個(gè)分區(qū),但要保持分區(qū)值?致:

更復(fù)雜的?如將多個(gè)分區(qū)重組成多個(gè)分區(qū):

在my sql中怎么將數(shù)據(jù)表分區(qū)

可以看mysql的data文件夾下面的數(shù)據(jù)庫文件,就可以查看當(dāng)前分區(qū)情況。

還有幾種獲取MySQL分區(qū)表信息的常用方法

SHOW CREATE TABLE

可以查看創(chuàng)建分區(qū)表的CREATE語句

SHOW TABLE STATUS

可以查看表是否為分區(qū)表

查看INFORMATION_SCHEMA.PARTITIONS表

可以查看表具有哪幾個(gè)分區(qū)、分區(qū)的方法、分區(qū)中數(shù)據(jù)的記錄數(shù)等重要信息

Mysql分區(qū)表Partition

一、背景

話說風(fēng)和日麗的一天,為提高隨著業(yè)務(wù)增長的大表(3510449行吧)的訪問效率,于是決定對表分區(qū),記錄如下。

二、實(shí)操

結(jié)合業(yè)務(wù),若干條記錄會集中在一個(gè)日期,查詢時(shí)也往往只查詢一個(gè)日期內(nèi)的數(shù)據(jù),于是選取分區(qū)字段為時(shí)間。

創(chuàng)建分區(qū) 比如

CREATE TABLE message_all (

id int(10) NOT NULL AUTO_INCREMENT,

......

createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間'

PRIMARY KEY ( id , createtime )

) ENGINE=InnoDB DEFAULT CHARSET=utf8

PARTITION BY RANGE (YEAR(createtime))

(PARTITION p2015 VALUES LESS THAN (2016) ENGINE = InnoDB,

PARTITION p2016 VALUES LESS THAN (2017) ENGINE = InnoDB,

PARTITION p2017 VALUES LESS THAN (2018) ENGINE = InnoDB,

PARTITION p2018 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)

不過我們表已經(jīng)有了當(dāng)然不能這么建,除非你想導(dǎo)一次數(shù)據(jù)。

如下操作 :

1、

ALTER TABLE message_all PARTITION BY RANGE (to_days(createtime))

(

PARTITION p2015 VALUES LESS THAN (to_days('2016-01-01')),

PARTITION p2016 VALUES LESS THAN (to_days('2017-01-01')),

PARTITION p2017 VALUES LESS THAN (to_days('2018-01-01')),

PARTITION p2018 VALUES LESS THAN MAXVALUE

);

或者

2、ALTER TABLE message_all PARTITION BY RANGE (YEAR(createtime))

(

PARTITION p2015 VALUES LESS THAN (YEAR('2016-01-01'))

);

然后追加。

ALTER TABLE message_all ADD PARTITION

(

PARTITION p2016 VALUES LESS THAN (YEAR('2017-01-01')),

PARTITION p2017 VALUES LESS THAN (YEAR('2018-01-01')),

PARTITION p2018 VALUES LESS THAN MAXVALUE

);

這里會有幾種錯(cuò)誤情況:

1、ALTER TABLE message_all PARTITION BY RANGE (to_days(createtime)) ;

[Err] 1492 - For RANGE partitions each partition must be defined

解釋:必須指定至少一個(gè)分區(qū)。

2、[Err] 1492 - A PRIMARY KEY must include all columns in the table's partitioning function

解釋:分區(qū)字段必須是主鍵之一。

3、[Err] 1492 - Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed

解釋:分區(qū)字段為timestamp,換成datetime。

4、[Err] 1526 - Table has no partition for value xxxx

解釋:用追加方式第一次必須覆蓋目前所有數(shù)據(jù)。

總結(jié):

1、創(chuàng)建時(shí)必須指定至少一個(gè)分區(qū)。

2、key必須為主鍵之一。

3、RANGE處必須為INT型,時(shí)間字段用函數(shù)轉(zhuǎn)——YEAR()、YEARWEEK()、TO_DAYS()。

4、THAN處必須為INT型,時(shí)間字段用函數(shù)轉(zhuǎn)——TO_DAYS、TO_SECONDS()、UNIX_TIMESTAMP()。

5、它就是以兩個(gè)INT比大小劃分的文件。

6、所有ENGINE必須一樣。

7、范圍分區(qū)添加只能在最大值后面追加。

8、分區(qū)是有上限的貌似1024個(gè)。

用到的其他操作

1、刪除分區(qū)(直接扔掉分區(qū)文件,數(shù)據(jù)也沒了)

ALTER TABLE message_all DROP PARTITION p2016;

2、清空分區(qū)數(shù)據(jù)

ALTER TABLE message_all TRUNCATE PARTITION p2017;

3、重定義(可實(shí)現(xiàn):分區(qū)拆分、合并、重命名)

ALTER TABLE message_all REORGANIZE PARTITION p201601,p201602,p201603,p201604 INTO

(

PARTITION p2016012 VALUES less than(TO_DAYS('2016-03-01')),

PARTITION p2016034 VALUES less than(TO_DAYS('2016-05-01'))

);

檢查/查看你的分區(qū)

1、SHOW TABLE STATUS LIKE 'message_all';

2、SELECT * FROM information_schema.partitions WHERE table_name='message_all';

3、SHOW CREATE TABLE message_all;

4、EXPLAIN SELECT COUNT(1) FROM message_all WHERE createtime= '2016-01-01' AND createtime '2016-12-30';如果用到了分區(qū)partitions里會有顯示。

5、指定分區(qū)查

SELECT COUNT(1) FROM message_all PARTITION (p2016) 表別名 WHERE ......;

到這里就結(jié)束啦,土豆白。

一些概念

水平分區(qū)Partition有以下幾種模式


分享題目:mysql怎么對表做分區(qū) mysql數(shù)據(jù)表分區(qū)
URL網(wǎng)址:http://weahome.cn/article/dodchgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部