MySQL表分区细节逻辑

一、建表时进行分区

  • Range分区表建表语句如下,其中分区键必须和id构成主键和唯一键:
create table if not exists inv_onhand_quantity_test_t
(
  STORAGE_ID      bigint auto_increment
  comment '主键',
  ITEM_ID         int                                not null
  comment '物料ID',
  ITEM_NUM        varchar(100)                       null
  comment '物料编码',
  TRAY_ID         int                                null
  comment '托盘ID',
  TRAY_NUM        varchar(16) charset utf8mb4        null
  comment '托盘号',
  LOCATION        varchar(16) charset utf8mb4        null
  comment '库位',
  ONHAND_QUANTITY double                             null
  comment '库存数量',
  WORKORDER_NUM   varchar(32) charset utf8mb4        null
  comment '工单号',
  TASK_NUM        varchar(32) charset utf8mb4        null
  comment '任务号',
  UOM             varchar(4) charset utf8mb4         null
  comment '物料单位',
  MANAGE_GROUP    varchar(16) charset utf8mb4        null
  comment '管理组别',
  SUBINV_ID       int(4)                             null
  comment '仓库ID',
  ITEM_LIS        varchar(100) charset utf8mb4       null
  comment '物料序列号',
  ITEM_BAT        varchar(100) charset utf8mb4       null
  comment '物料批次号',
  SOURCE_TYPE     int(4)                             null
  comment '来源类型:',
  SUPPLIER_ID     varchar(200) default '0'           null
  comment '供应商ID',
  SOURCE_NUMBER   varchar(100)                       null
  comment '来源单号',
  IS_TAKINGSTOCK  int(2) default '0'                 null
  comment '0 未操作 1 盘点计划中',
  CREATE_TIME     datetime default CURRENT_TIMESTAMP not null,
  CREATE_USER     varchar(16)                        null,
  UPDATE_TIME     datetime default CURRENT_TIMESTAMP null,
  UPDATE_USER     varchar(16)                        null,
  ORGANIZATION_ID int                                null
  comment '库存组织ID',
  PRIMARY KEY (`STORAGE_ID`, `CREATE_TIME`),
  UNIQUE KEY `id_UNIQUE` (`STORAGE_ID`, `CREATE_TIME`)
)
  -- 分区
  PARTITION BY RANGE COLUMNS (CREATE_TIME)
  (PARTITION p08 VALUES LESS THAN ('2019-08-31')
    ENGINE = InnoDB,
  PARTITION p09 VALUES LESS THAN ('2019-09-30')
    ENGINE = InnoDB,
  PARTITION p10 VALUES LESS THAN ('2019-10-31')
    ENGINE = InnoDB);

二、建表后进行分区(消耗资源巨大)

  • 创建分区
ALTER TABLE inv_onhand_quantity_t PARTITION BY RANGE columns (CREATE_TIME)
(
PARTITION p_6 VALUES LESS THAN ('2019-06-30'),
PARTITION p_9 VALUES LESS THAN ('2019-09-30'),
PARTITION p_12 VALUES LESS THAN ('2019-12-31'));
  • 添加新分区
alter TABLE `inv_onhand_quantity_copy1_t`
  add PARTITION (
  -- PARTITION p_11 VALUES LESS THAN ('2019-11-30') ENGINE = InnoDB,
  PARTITION p_max VALUES LESS THAN MAXVALUE
  );
  • 删除分区
alter table `inv_onhand_quantity_copy1_t`
  drop PARTITION p_max;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章