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

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

mysql時間怎么分區(qū),mysql創(chuàng)建時間分區(qū)

十、MySQL表分區(qū)

??表分區(qū)是將?個表的數(shù)據(jù)按照?定的規(guī)則?平劃分為不同的邏輯塊,并分別進?物理存儲,這個規(guī)則就叫做分區(qū)函數(shù),可以有不同的分區(qū)規(guī)則。5.7可以通過show plugins語句查看當前MySQL是否?持表分區(qū)功能。

站在用戶的角度思考問題,與客戶深入溝通,找到甘泉網(wǎng)站設(shè)計與甘泉網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋甘泉地區(qū)。

??但當表中含有主鍵或唯?鍵時,則每個被?作 分區(qū)函數(shù)的字段必須是表中唯?鍵和主鍵的全部或?部分 ,否則就?法創(chuàng)建分區(qū)表。?如下?的表由于唯?鍵和主鍵沒有相同的字段,所以?法創(chuàng)建表分區(qū)

上述例?中刪除唯?鍵,確保主鍵中的字段包含分區(qū)函數(shù)中的所有字段,創(chuàng)建成功

或者將主鍵擴展為包含ref字段

表分區(qū)的主要優(yōu)勢在于:

??可以允許在?個表?存儲更多的數(shù)據(jù),突破磁盤限制或者?件系統(tǒng)限制

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

??對某些查詢和修改語句來說,可以 ?動 將數(shù)據(jù)范圍縮?到?個或?個表分區(qū)上,優(yōu)化語句執(zhí)?效率。?且可以通過 顯示指定表分區(qū) 來執(zhí)?語句,?如 SELECT * FROM t PARTITION (p0,p1) WHERE c 5

表分區(qū)類型分為:

范圍表分區(qū),按照?定的范圍值來確定每個分區(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ū)?,以此類推,當新插?的數(shù)據(jù)為(72, ‘Mitchell’, ‘Wilson’, ‘1998-06-25’, NULL, 13) 時,則新數(shù)據(jù)被插?到p2分區(qū)?,但當插?的數(shù)據(jù)的store_id為21時,由于沒有分區(qū)去容納此數(shù)據(jù),所以會報錯,我們需要修改?下表的定義

報錯:

修改表的定義:

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

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

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

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

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

對range和list表分區(qū)來說,分區(qū)函數(shù)可以包含多個字段,分區(qū)多字段函數(shù)(column partition) 所涉及的字段類型可以包括:

范圍多字段分區(qū)函數(shù)與普通的范圍分區(qū)函數(shù)的區(qū)別在于:

a) 字段類型多樣化

b) 范圍多字段分區(qū)函數(shù) 不?持表達式,只能?字段名

c) 范圍多字段分區(qū)函數(shù)?持?個或多個字段

再?如創(chuàng)建如下的表分區(qū):

對多列對?來說:

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

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

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

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

使用日期分區(qū)

但是這種情況在日期增長到非常大的時候是很復雜的, 所以這種還是使用RANGE 分區(qū)方式比較好

??按照?個?定義的函數(shù)返回值來確定每個分區(qū)包含的數(shù)據(jù),這個 ?定義函數(shù)也可以僅僅是?個字段名字

??通過PARTITION BY HASH (expr)?句來表達哈希表分區(qū),其中的 expr表達式必須返回?個整數(shù),基于分區(qū)個數(shù)的取模(%)運算。根據(jù)余數(shù)插?到指定的分區(qū)

??對哈希表分區(qū)來說只需要定義分區(qū)的個數(shù),其他的事情由內(nèi)部完成

如果沒有寫明PARTITIONS字段,則默認為1,表達式可以是整數(shù)類型字段,也可以是?個函數(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ù)據(jù)的分區(qū)計算?法為:

??與哈希表分區(qū)類似,只不過哈希表分區(qū)依賴于?定義的函數(shù),?key表分區(qū)的哈希算法是依賴MySQL本身, CREATE TABLE ... PARTITION BY KEY () 創(chuàng)建key表分區(qū), 括號??可以包含0個或者多個字段,所引?的字段必須是主鍵或者主鍵的?部分 ,如果括號??沒有字段,則代表使?主鍵

如果表中沒有主鍵但有唯?鍵,則使?唯?鍵,但 唯?鍵字段必須定義為not null ,否則報錯

所引?的字段未必必須是整數(shù)類型,其他的類型也可以使?,?如:

?表分區(qū),是在表分區(qū)的基礎(chǔ)上再創(chuàng)建表分區(qū)的概念, 每個表分區(qū)下的?表分區(qū)個數(shù)必須?致 ,?如:

ts表擁有三個范圍分區(qū),同時每個分區(qū)都各?有兩個?分區(qū),所以總共有6個分區(qū)

?表分區(qū)必須是范圍/列表分區(qū)+哈希/key?表分區(qū)的組合

?表分區(qū)也可以顯示的指定?表分區(qū)的名字,?如:

不同的表分區(qū)對NULL值的處理?式不同

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

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

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

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

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

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

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

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

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

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

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

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

求助:MySQL如何按天分區(qū)

所謂按天,不過是日期精確到天而已。

錯誤的按日期分區(qū)例子

最直觀的方法,就是直接用年月日這種日期格式來進行常規(guī)的分區(qū):

mysql??create?table?rms?(d?date)??

-??partition?by?range?(d)??

-?(partition?p0?values?less?than?('1995-01-01'),??

-??partition?p1?VALUES?LESS?THAN?('2010-01-01'));

上面的例子中,就是直接用"Y-m-d"的格式來對一個table進行分區(qū),可惜想當然往往不能奏效,會得到一個錯誤信息:

ERROR 1064 (42000): VALUES value must be of same type as partition function near '),

partition p1 VALUES LESS THAN ('2010-01-01'))' at line 3

上述分區(qū)方式?jīng)]有成功,而且明顯的不經(jīng)濟,老練的DBA會用整型數(shù)值來進行分區(qū):

mysql?CREATE?TABLE?part_date1??

-??????(??c1?int?default?NULL,??

-??c2?varchar(30)?default?NULL,??

-??c3?date?default?NULL)?engine=myisam??

-??????partition?by?range?(cast(date_format(c3,'%Y%m%d')?as?signed))??

-?(PARTITION?p0?VALUES?LESS?THAN?(19950101),??

-?PARTITION?p1?VALUES?LESS?THAN?(19960101)?,??

-?PARTITION?p2?VALUES?LESS?THAN?(19970101)?,??

-?PARTITION?p3?VALUES?LESS?THAN?(19980101)?,??

-?PARTITION?p4?VALUES?LESS?THAN?(19990101)?,??

-?PARTITION?p5?VALUES?LESS?THAN?(20000101)?,??

-?PARTITION?p6?VALUES?LESS?THAN?(20010101)?,??

-?PARTITION?p7?VALUES?LESS?THAN?(20020101)?,??

-?PARTITION?p8?VALUES?LESS?THAN?(20030101)?,??

-?PARTITION?p9?VALUES?LESS?THAN?(20040101)?,??

-?PARTITION?p10?VALUES?LESS?THAN?(20100101),??

-?PARTITION?p11?VALUES?LESS?THAN?MAXVALUE?);

Query OK, 0 rows affected (0.01 sec)

搞定?接著往下分析

mysql?explain?partitions??

-?select?count(*)?from?part_date1?where??

-??????c3?'1995-01-01'?and?c3?'1995-12-31'\G??

***************************?1.?row?***************************??

id:?1??

select_type:?SIMPLE??

table:?part_date1??

partitions:?p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11??

type:?ALL??

possible_keys:?NULL??

key:?NULL??

key_len:?NULL??

ref:?NULL??

rows:?8100000??

Extra:?Using?where??

1?row?in?set?(0.00?sec)

萬惡的mysql居然對上面的sql使用全表掃描,而不是按照我們的日期分區(qū)分塊查詢。原文中解釋到MYSQL的優(yōu)化器并不認這種日期形式的分區(qū),花了大量的篇幅來引誘俺走上歧路,過分。

正確的日期分區(qū)例子

mysql優(yōu)化器支持以下兩種內(nèi)置的日期函數(shù)進行分區(qū):

TO_DAYS()

YEAR()

看個例子:

mysql?CREATE?TABLE?part_date3??

-??????(??c1?int?default?NULL,??

-??c2?varchar(30)?default?NULL,??

-??c3?date?default?NULL)?engine=myisam??

-??????partition?by?range?(to_days(c3))??

-?(PARTITION?p0?VALUES?LESS?THAN?(to_days('1995-01-01')),??

-?PARTITION?p1?VALUES?LESS?THAN?(to_days('1996-01-01'))?,??

-?PARTITION?p2?VALUES?LESS?THAN?(to_days('1997-01-01'))?,??

-?PARTITION?p3?VALUES?LESS?THAN?(to_days('1998-01-01'))?,??

-?PARTITION?p4?VALUES?LESS?THAN?(to_days('1999-01-01'))?,??

-?PARTITION?p5?VALUES?LESS?THAN?(to_days('2000-01-01'))?,??

-?PARTITION?p6?VALUES?LESS?THAN?(to_days('2001-01-01'))?,??

-?PARTITION?p7?VALUES?LESS?THAN?(to_days('2002-01-01'))?,??

-?PARTITION?p8?VALUES?LESS?THAN?(to_days('2003-01-01'))?,??

-?PARTITION?p9?VALUES?LESS?THAN?(to_days('2004-01-01'))?,??

-?PARTITION?p10?VALUES?LESS?THAN?(to_days('2010-01-01')),??

-?PARTITION?p11?VALUES?LESS?THAN?MAXVALUE?);

Query OK, 0 rows affected (0.00 sec)

以to_days()函數(shù)分區(qū)成功,我們分析一下看看:

mysql?explain?partitions??

-?select?count(*)?from?part_date3?where??

-??????c3?date?'1995-01-01'?and?c3?date?'1995-12-31'\G??

***************************?1.?row?***************************??

id:?1??

select_type:?SIMPLE??

table:?part_date3??

partitions:?p1??

type:?ALL??

possible_keys:?NULL??

key:?NULL??

key_len:?NULL??

ref:?NULL??

rows:?808431??

Extra:?Using?where??

1?row?in?set?(0.00?sec)

可以看到,mysql優(yōu)化器這次不負眾望,僅僅在p1分區(qū)進行查詢。在這種情況下查詢,真的能夠帶來提升查詢效率么?下面分別對這次建立的part_date3和之前分區(qū)失敗的part_date1做一個查詢對比:

mysql?select?count(*)?from?part_date3?where??

-??????c3?date?'1995-01-01'?and?c3?date?'1995-12-31';??

+----------+??

|?count(*)?|??

+----------+??

|???805114?|??

+----------+??

1?row?in?set?(4.11?sec)??

mysql?select?count(*)?from?part_date1?where??

-??????c3?date?'1995-01-01'?and?c3?date?'1995-12-31';??

+----------+??

|?count(*)?|??

+----------+??

|???805114?|??

+----------+??

1?row?in?set?(40.33?sec)

可以看到,分區(qū)正確的話query花費時間為4秒,而分區(qū)錯誤則花費時間40秒(相當于沒有分區(qū)),效率有90%的提升!所以我們千萬要正確的使用分區(qū)功能,分區(qū)后務(wù)必用explain驗證,這樣才能獲得真正的性能提升。

注意:

在mysql5.1中建立分區(qū)表的語句中,只能包含下列函數(shù):

ABS()

CEILING()?and?FLOOR()?(在使用這2個函數(shù)的建立分區(qū)表的前提是使用函數(shù)的分區(qū)鍵是INT類型),例如

mysql?CREATE?TABLE?t?(c?FLOAT)?PARTITION?BY?LIST(?FLOOR(c)?)(?-?PARTITION?p0?VALUES?IN?(1,3,5),?-?PARTITION?p1?VALUES?IN?(2,4,6)?-?);;?ERROR?1491?(HY000):?The?PARTITION?function?returns?the?wrong?type???mysql?CREATE?TABLE?t?(c?int)?PARTITION?BY?LIST(?FLOOR(c)?)(?-?PARTITION?p0?VALUES?IN?(1,3,5),?-?PARTITION?p1?VALUES?IN?(2,4,6)?-?);?Query?OK,?0?rows?affected?(0.01?sec)??

DAY()??

DAYOFMONTH()??

DAYOFWEEK()??

DAYOFYEAR()??

DATEDIFF()??

EXTRACT()??

HOUR()??

MICROSECOND()??

MINUTE()??

MOD()??

MONTH()??

QUARTER()??

SECOND()??

TIME_TO_SEC()??

TO_DAYS()??

WEEKDAY()??

YEAR()??

YEARWEEK()

mysql 怎么按照時間做表分區(qū)

用mysql的表分區(qū)功能(邏輯上還是一個表,對程序來說是透明的),通過分區(qū)函數(shù)可實現(xiàn)自動分表。如果想實現(xiàn)根據(jù)數(shù)據(jù)每月或每周動態(tài)的再分區(qū),可以寫一個存儲過程實現(xiàn)分區(qū)調(diào)整邏輯,最后寫一個mysql event(自動化作業(yè))按周期調(diào)用這個存儲過程就行了。

Mysql按時間進行表分區(qū)

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

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ū)表Partition

一、背景

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

二、實操

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

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

CREATE TABLE message_all (

id int(10) NOT NULL AUTO_INCREMENT,

......

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

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)有了當然不能這么建,除非你想導一次數(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

);

這里會有幾種錯誤情況:

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

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

解釋:必須指定至少一個分區(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)建時必須指定至少一個分區(qū)。

2、key必須為主鍵之一。

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

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

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

6、所有ENGINE必須一樣。

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

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

用到的其他操作

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

ALTER TABLE message_all DROP PARTITION p2016;

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

ALTER TABLE message_all TRUNCATE PARTITION p2017;

3、重定義(可實現(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ū)表簡介

我們的業(yè)務(wù)只存近一段時間的數(shù)據(jù),因此有大量表需要清理 歷史 數(shù)據(jù),目前使用的delete清理數(shù)據(jù),存在以下問題。為避免同時支持大量delete,我們的清理任務(wù)只在低峰期串行執(zhí)行,導致任務(wù)過多時需要排隊,甚至失敗的情況;數(shù)據(jù)清理使用delete語句,表數(shù)據(jù)量較大時,對數(shù)據(jù)庫造成很大壓力;即使我們刪除了舊數(shù)據(jù),已刪除的數(shù)據(jù)仍占據(jù)存儲空間,底層數(shù)據(jù)文件并沒有立刻變小,以至于形成數(shù)據(jù)空洞。

查看MySQL官方文檔時,發(fā)現(xiàn)了分區(qū)表,因此基于官方文檔總結(jié)一下。

MySQL邏輯上為一個表,物理上存儲在多個文件中,這是 MySQL 支持的功能(5.1 開始), 8.0 版本只 InnoDB 和 NDB 支持分區(qū)表。

優(yōu)點:

缺點:

根據(jù)分區(qū)表鍵值的范圍把數(shù)據(jù)存儲到表的不同分區(qū)中,適用于以時間或日期作為分區(qū)類型,方便數(shù)據(jù)清理。

小提示:

1.當插入數(shù)據(jù)分區(qū)不存在時會報錯:Table has no partition for value xxx;

2.Range類型分區(qū)字段必須是數(shù)值,時間類型可用函數(shù)轉(zhuǎn)換為數(shù)值;

3.分區(qū)字段列值可以為null,所有為null的數(shù)據(jù)將存在最小的分區(qū)中;

按分區(qū)鍵取值的列表進行分區(qū),每一行數(shù)據(jù)須找到對應(yīng)的分區(qū)列表,否則數(shù)據(jù)插入失敗

小提示:

根據(jù)指定分區(qū)表達式的整數(shù)值以及分區(qū)數(shù)進行數(shù)據(jù)劃分(mod函數(shù))

小提示:

按鍵分區(qū)類似于按哈希分區(qū),只是哈希分區(qū)使用用戶定義的表達式,用于鍵分區(qū)的哈希函數(shù)由 MySQL 服務(wù)器提供。NDB 集群為此使用 MD5() ; 對于使用其他存儲引擎的表,服務(wù)器使用自己的內(nèi)部哈希函數(shù)。

小提示:

子分區(qū)(subpartitioning)也稱為復合分區(qū)(composite partitioning) ,是已分區(qū)表中每個分區(qū)的進一步劃分

小提示:

小提示:


本文標題:mysql時間怎么分區(qū),mysql創(chuàng)建時間分區(qū)
轉(zhuǎn)載來源:http://weahome.cn/article/hojspg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部