MySQL分區(qū)摘要

MySQL支持的分區(qū)類型為水平分區(qū),并不支持垂直分區(qū)。

創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站設(shè)計網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元防城港做網(wǎng)站,已為上家服務(wù),為防城港各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

水平分區(qū),以行為單位,劃分到不同的物理文件中;垂直分區(qū)即針對列劃分。

MySQL的分區(qū),除了InnoDB支持,MyISAM也支持,所以分區(qū)并不是引擎級別的事兒。

分區(qū)并不一定會讓訪問變得更快,尤其是OLTP應(yīng)用,OLAP應(yīng)用使用分區(qū)的效果往往更好。

MySQL支持的如下幾種分區(qū)類型。

  • RANGE行數(shù)據(jù)基于一個給定連續(xù)區(qū)間的列值劃分。
  • LIST和RANGE類似,只是LIST面向的不是連續(xù)區(qū)間值,而是離散的集合。
  • HASH根據(jù)自定義的表達(dá)式返回值進(jìn)行分區(qū),不支持負(fù)數(shù)返回。
  • KEY根據(jù)MySQL提供的hash函數(shù)進(jìn)行分區(qū)

不論按照哪種類型進(jìn)行分區(qū),如果當(dāng)前表有主鍵或者唯一索引,分區(qū)列必須是唯一索引的組成部分。反過來,如果當(dāng)前表沒有定義主鍵也沒有唯一索引,分區(qū)列可以是任何列。


分區(qū)操作示例:

create table sales(id int, price decimal(9,2), season int, finyear datetime) 
partition by range(season) (
prtition s1 values less than (4),
partition s2 values less than (7),
partition s3 values less than (10),
partition s4 values less than (13));

使用函數(shù)獲取range值

create table sales(id int, price decimal(9,2), season int, finyear datetime) 
partition by range(year(finyear)) ( 
partition s1 values less than (2016), 
partition s2 values less than (2017), 
partition s3 values less than (2018),
partition s4 values less than (2020));
create table sales(id int, price decimal(9,2), season int, finyear datetime) 
partition by range(year(finyear)*100+ month(finyear)) ( 
partition s1 values less than (201804), 
partition s2 values less than (201807), 
partition s3 values less than (201810),
partition s4 values less than (201813));

LIST分區(qū)示例

create table sales(id int, price decimal(9,2), season int, finyear datetime) 
partition by LIST(id) ( 
partition s1 values in (1,3,5,7,9), 
partition s2 values in (2,4,6,8,10));

HASH分區(qū)示例

create table sales(id int, price decimal(9,2), season int, finyear datetime) engine=innodb
partition by hash(year(finyear));

KEY分區(qū)示例

create table sales(id int, price decimal(9,2), season int, finyear datetime) engine=innodb
partition by key(finyear);
分區(qū)后的數(shù)據(jù)存儲結(jié)構(gòu)及使用效果

以RANGE分區(qū)為例
MySQL分區(qū)摘要

插入數(shù)據(jù)

insert into sales select 1,10.05,1,'2018-01-01';
insert into sales select 2,10.05,3,'2018-03-01';
insert into sales select 3,10.05,4,'2018-04-01';

執(zhí)行查詢

explain partitions 
select * from sales where finyear < '2016-01-01';

MySQL分區(qū)摘要

可以看到,查詢優(yōu)化器,直接跳過第四個分區(qū),在前三個分區(qū)中查詢,這就是要的效果。

除了分區(qū),還有分表、分庫、分片操作,每一個都很重要,也都有各自的適用場景。

分享名稱:MySQL分區(qū)摘要
文章網(wǎng)址:http://muchs.cn/article46/gedshg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、App開發(fā)云服務(wù)器、微信公眾號品牌網(wǎng)站建設(shè)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)