記錄一下MySQL的表分區(qū)常用操作

一、分區(qū)條件

  1. 一個表最多只能有1024個分區(qū)。
  2. MySQL5.1之后,才支持表分區(qū)功能,且分區(qū)表達式必須是整數(shù)。
  3. MySQL5.5之后,增加了COLUMNS分區(qū)(RANGE / LIST),支持整形、日期、字符串。
  4. 分區(qū)字段,必須包含在主鍵字段內(nèi)。

二、預(yù)處理主鍵

目的:將分區(qū)字段添加到主鍵

ALTER TABLE <表名> DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `<分區(qū)字段>`);

例如:

ALTER TABLE tb_article DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `cdate`);

三、創(chuàng)建分區(qū)

定義分區(qū)規(guī)則:

PARTITION BY [ RANGE | LIST ] COLUMNS(<分區(qū)字段>)(
    PARTITION <分區(qū)名> VALUES <分區(qū)規(guī)則>,
    ...
)

可以在建表(CREATE TABLE)時直接創(chuàng)建分區(qū):

CREATE TABLE `<表名>` (
    `<ID字段名>` varchar(20) NOT NULL COMMENT 'ID',
    `<分區(qū)字段名>` varchar(20) NOT NULL COMMENT '分區(qū)',
    ...  , PRIMARY KEY (`<ID字段名>`, `<分區(qū)字段名>`)
)
PARTITION BY [ RANGE | LIST ] COLUMNS(<分區(qū)字段>)(
    PARTITION <分區(qū)名> VALUES <分區(qū)規(guī)則>,
    ...
);

也可以為現(xiàn)有表創(chuàng)建分區(qū)(ALTER TABLE),但需要提前將分區(qū)字段添加到主鍵。

ALTER TABLE `<表名>`
PARTITION BY [ RANGE | LIST ] COLUMNS(<分區(qū)字段>)(
    PARTITION <分區(qū)名> VALUES <分區(qū)規(guī)則>,
    ...
);

四、添加分區(qū)

ALTER TABLE `<表名>` ADD PARTITION (
    PARTITION <分區(qū)名> VALUES <分區(qū)規(guī)則>,
    ...
);

五、刪除分區(qū)

同時也會刪除分區(qū)內(nèi)的數(shù)據(jù)

ALTER TABLE `<表名>` DROP PARTITION <分區(qū)名>;

六、實例1:創(chuàng)建 RANGE COLUMNS 分區(qū)

CREATE TABLE tb_article (
    id VARCHAR(20)     NOT NULL,
    title VARCHAR(50)     NOT NULL,
    cdate       DATE NOT NULL, PRIMARY KEY (id, cdate)
) 
PARTITION BY RANGE COLUMNS(cdate)(
    PARTITION p2018 values less than ('2018'),
    PARTITION p2019 values less than ('2019'),
    PARTITION p2020 values less than (MAXVALUE)
);

七、實例2:創(chuàng)建 LIST COLUMNS 分區(qū)

CREATE TABLE tb_article (
    id VARCHAR(20)     NOT NULL,
    title VARCHAR(50)     NOT NULL,
    region VARCHAR(20)     NOT NULL, PRIMARY KEY (id, region)
) 
PARTITION BY LIST COLUMNS(region)(
    PARTITION pEast values in ('east'),
    PARTITION pWest values in ('west'),
    PARTITION pNorth values in ('north'),
    PARTITION pSouth values in ('south')
);

八、分區(qū)的應(yīng)用

  1. 按分區(qū)檢索
SELECT * FROM tb_article PARTITION(pEast);
SELECT atc.* 
    FROM tb_article PARTITION(pEast) atc INNER JOIN tb_region rg ON rg.region = atc.region;
  1. 刪除分區(qū)內(nèi)的數(shù)據(jù)
DELETE FROM tb_artical PARTITION(pEast)
  1. 修改分區(qū)內(nèi)的數(shù)據(jù)
UPDATE tb_artical PARTITION(pEast) SET title = CONCAT(title, ' - modify') WHERE id = 'xxx001';
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容