1. 程式人生 > >mysql如何進行分割槽

mysql如何進行分割槽

分割槽型別

RANGE分割槽:基於屬於一個給定連續區間的列值,把多行分配給分割槽。

LIST分割槽:類似於按RANGE分割槽,區別在於LIST分割槽是基於列值匹配一個離散值集合中的某個值來進行選擇。

RANGE分割槽

基於屬於一個給定連續區間的列值,把多行分配給分割槽。

這些區間要連續且不能相互重疊,使用VALUES LESS THAN操作符來進行定義。以下是例項。

Sql程式碼:

CREATE TABLE members (
    id INT,
    joined DATE NOT NULL
)
PARTITION BY RANGE COLUMNS(joined) (
    PARTITION a VALUES LESS THAN ('1960-01-01'),
    PARTITION b VALUES LESS THAN ('1970-01-01'),
    PARTITION c VALUES LESS THAN ('1980-01-01'),
    PARTITION d VALUES LESS THAN ('1990-01-01'),
    PARTITION e VALUES LESS THAN MAXVALUE
);

LIST分割槽

CREATE TABLE `ts_rta_visit_from` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `STAT_DATE` varchar(8) NOT NULL COMMENT '統計日期(日期:YYYYMMDD)',
  `STAT_MINUTE` varchar(4) DEFAULT NULL COMMENT '統計分鐘(分鐘:HHMM)(每5分鐘一個取值,一天共288個取值,從0000-2355)',
  `SITE_ID` varchar(2) DEFAULT NULL COMMENT '站點',
  `TERMINAL_TYPE_ID` varchar(1) DEFAULT '1' COMMENT '終端型別編碼',
  `NEW_OLD_UV_FLAG` varchar(1) DEFAULT NULL COMMENT '新老訪客標識',
  `VISIT_FROM_ID` varchar(2) DEFAULT NULL COMMENT '訪問來源編碼',
  `VISIT_FROM_CLASS_ID` varchar(1) DEFAULT NULL COMMENT '訪問來源大類編碼',
  `COMPARE_PERIOD_ID` varchar(2) DEFAULT NULL COMMENT '對比時間段編碼',
  `CD_PV_NUM` int(11) DEFAULT NULL COMMENT '當天累計瀏覽量',
  `CD_UV_NUM` int(11) DEFAULT NULL COMMENT '當天累計訪客數',
  `CD_VISIT_NUM` int(11) DEFAULT NULL COMMENT '當天累計訪問次數',
  `CD_VISIT_DURATION` bigint(20) DEFAULT NULL COMMENT '當天累計訪問時長',
  `CD_URL_NUM` int(11) DEFAULT NULL COMMENT '當天累計頁面數',
  `DATA_TIME` varchar(8) DEFAULT NULL COMMENT '資料處理時間',
  PRIMARY KEY (`ID`,`STAT_DATE`)
) ENGINE=InnoDB AUTO_INCREMENT=4177 DEFAULT CHARSET=utf8 COMMENT='應用層_實時分析_流量來源分析\n\n兩份資料:一份到流量來源小類,一份到流量來源大類'
/*!50500 PARTITION BY LIST  COLUMNS(STAT_DATE)
(PARTITION p20151010 VALUES IN ('20151010') ENGINE = InnoDB,
 PARTITION p20151011 VALUES IN ('20151011') ENGINE = InnoDB,
 PARTITION p20151203 VALUES IN ('20151203') ENGINE = InnoDB,
 PARTITION p20151204 VALUES IN ('20151204') ENGINE = InnoDB,
 PARTITION p20151205 VALUES IN ('20151205') ENGINE = InnoDB,
 PARTITION p20151206 VALUES IN ('20151206') ENGINE = InnoDB,
 PARTITION p20151207 VALUES IN ('20151207') ENGINE = InnoDB,
 PARTITION p20151208 VALUES IN ('20151208') ENGINE = InnoDB)

新增分割槽

alter TABLE `test1` add PARTITION(
 PARTITION p20180629 VALUES LESS THAN (20180630) ENGINE = InnoDB
);

ALTER TABLE ts_rta_visit_channel ADD PARTITION (PARTITION p20151207 VALUES IN ('20151207') ENGINE = InnoDB);

刪除分割槽

alter table `test1`  drop PARTITION p20180629;