본문 바로가기
MYSQL

[Mysql] TABLE Partition 구성 테스트 진행

by Hwoarang757 2023. 6. 13.

출처 : MySQL Partition 파티션(1) - 정의와 기능 설명 파티션 제약사항 | Hoing

 

MySQL Partition 파티션(1) - 정의와 기능 설명 파티션 제약사항

 

hoing.io

 

* 현재 운영 테이블 COLUMN의 경우 년월일시형태의 문자열로 구성되어있는 상태입니다,,,,

Data Type 이 VARCHAR 이다 보니 , 년월일시형태의 문자열 VARCHAR COLUMN 을 기준으로

파티션을 RANGE 로 구성하여 테스트 진행 해보았습니다.

 

* TABLE에 Partition 구성시에 PRIMARY KEY COLUMN을 구성하시려는 경우 PARTITION을 구성하는 컬럼 이외에 다른 컬럼으로 지정은 안되는 것을 확인 하였습니다 -0-;;;; [ Partition을 구성하는 컬럼이 무조건 포함되어야 하는 것 같습니다 -_-;;; ]

 

 

/* VARCHAR 형태 COLUMN RANGE 구성 */

CREATE TABLE `tb_test_varchar`

(

`REGDT` VARCHAR(24) NOT NULL COMMENT '등록일시' COLLATE 'utf8_general_ci',

`VAL` VARCHAR(50) NULL COLLATE 'utf8_general_ci'

)

PARTITION BY RANGE COLUMNS(REGDT)

(

      PARTITION p0 VALUES LESS THAN ('20230101000000') ENGINE=INNODB,

      PARTITION p1 VALUES LESS THAN ('20240101000000') ENGINE=INNODB,

      PARTITION p2 VALUES LESS THAN ('20250101000000') ENGINE=INNODB,

      PARTITION p3 VALUES LESS THAN ('20260101000000') ENGINE=INNODB,

      PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE=INNODB

);

 

 

 

/* DATE 형태 COLUMN RANGE 구성 */

CREATE TABLE `tb_test_date`

(

`REGDT` DATE NOT NULL COMMENT '등록일시' COLLATE 'utf8_general_ci',

`VAL` VARCHAR(50) NULL COLLATE 'utf8_general_ci'

)

PARTITION BY RANGE COLUMNS(REGDT)

(

      PARTITION p0 VALUES LESS THAN ('2023-01-01') ENGINE=INNODB,

      PARTITION p1 VALUES LESS THAN ('2024-01-01') ENGINE=INNODB,

      PARTITION p2 VALUES LESS THAN ('2025-01-01') ENGINE=INNODB,

      PARTITION p3 VALUES LESS THAN ('2026-01-01') ENGINE=INNODB,

      PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE=INNODB

);

 

 

 

/* 테스트 데이터 INSERT 처리 진행 */

INSERT tb_test_varchar

SELECT '20230613000000','A' UNION

SELECT '20240613000000','B' UNION

SELECT '20250613000000','C' UNION

SELECT '20260613000000','D' UNION

SELECT '20270613000000','E'

 

 

INSERT tb_test_date

SELECT '2023-06-13','A' UNION

SELECT '2024-06-13','B' UNION

SELECT '2025-06-13','C' UNION

SELECT '2026-06-13','D' UNION

SELECT '2027-06-13','E'

 

 

/* 파티션 조회 확인 테스트 */

EXPLAIN PARTITIONS

SELECT * FROM TB_TEST_VARCHAR

WHERE 1=1

AND REGDT >= '20220101000000'

AND REGDT <= '20230101000000' ;

 

 

EXPLAIN PARTITIONS

SELECT * FROM TB_TEST_DATE

WHERE 1=1

AND REGDT >= '2023-06-13'

AND REGDT <= '2026-06-13' ;

 

* mysql 의 해당 data 디렉터리의 Table 관련 파일 확인시에도 Partition 이름 별로

   File이 구분되어 생성 된 것을 확인 하였습니다~!