MySql表分区相关sql笔记

-- 删除表
drop table `Order`;

-- by range 分区
CREATE TABLE `Order` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `partition_key` INT NOT NULL,
    `amt` DECIMAL (5) NULL,
   primary key (id,partition_key)

PARTITION BY RANGE (partition_key) (
 
    PARTITION part0 VALUES LESS THAN (201901),
      PARTITION part1 VALUES LESS THAN (201902),
      PARTITION part2 VALUES LESS THAN (201903),
        PARTITION part3 VALUES LESS THAN MAXVALUE
);


INSERT INTO `Order` (`id`, `partition_key`, `amt`) VALUES ('1', '201901', '1000');
INSERT INTO `Order` (`id`, `partition_key`, `amt`) VALUES ('2', '201902', '800');
INSERT INTO `Order` (`id`, `partition_key`, `amt`) VALUES ('3', '201903', '1200');

-- 没带上分区字段条件 从全部分区查询
explain partitions select * from `Order` ;
explain partitions select * from `Order` where amt='1000';

-- 带上分区字段 只从分区查询 
explain partitions select * from `Order` where partition_key = '201903';
-- 指定分区 只从分区查询
explain partitions select * from `Order` PARTITION(part3);

 
-- 删除分区和数据
alter table `Order` drop partition part3;
-- 删除数据 保留分区信息
ALTER TABLE `Order` TRUNCATE PARTITION part1;
-- 删除全部分区信息 保留数据
ALTER TABLE `Order` REMOVE PARTITIONING;

-- 重新修改分区
ALTER TABLE `Order`
PARTITION by RANGE(partition_key) (
  PARTITION part0 VALUES LESS THAN (201812),

      PARTITION part1 VALUES LESS THAN (201912),

        PARTITION part2 VALUES LESS THAN (202012),

        PARTITION part3 VALUES LESS THAN (202112),

        PARTITION part4 VALUES LESS THAN (202212),

        PARTITION part5 VALUES LESS THAN MAXVALUE)
;

-- 将最后面part5分区 再细分成3个分区
REORGANIZE PARTITION part5 INTO ( 
    PARTITION p20 VALUES LESS THAN (202312),
    PARTITION p21 VALUES LESS THAN (202412),
    PARTITION p22 VALUES LESS THAN MAXVALUE
);


-- by hash 分区 partition_key 必须int;
CREATE TABLE `Order` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `partition_key` INT NOT NULL,
    `amt` DECIMAL (5) NULL,
   primary key (id,partition_key)

PARTITION by hash(partition_key) partitions 100;


-- by key 分区 key可以字符串;
CREATE TABLE `Order` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `partition_key` INT NOT NULL,
    `amt` DECIMAL (5) NULL,
   primary key (id,partition_key)

PARTITION by key(partition_key) partitions 100;

-- by list 分区 partition_key必须int;
CREATE TABLE `Order` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `partition_key` INT NOT NULL,
    `amt` DECIMAL (5) NULL,
   primary key (id,partition_key)

PARTITION by list(tenant_id) (
    PARTITION part100 VALUES in (100),
    PARTITION part10001 VALUES in (10001),
    PARTITION part10002 VALUES in (10002)
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值