mysql을 사용하고 있는 사용자 입니다.
질의 사항이 있어 글을 올리게 되었습니다.
mysql에서 파티션 테이블을 사용할 경우, 실행계획을 출력하게 되면 데이터가 들어있지 않을 것 같은 파티션도 함께 실행계획에 나타납니다.
예를 들어, 아래와 같이 테이블을 사용하고 있습니다.
CREATE TABLE test (
log_idx int(10) unsigned NOT NULL AUTO_INCREMENT,
to_dt datetime NOT NULL,
mmdv char(2) NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=euckr
PARTITION BY RANGE (TO_DAYS(to_dt))
(
PARTITION PART_201907 VALUES LESS THAN (to_days(20190701)) ENGINE = InnoDB,
PARTITION PART_201908 VALUES LESS THAN (to_days(20190801)) ENGINE = InnoDB,
PARTITION PART_201909 VALUES LESS THAN (to_days(20190901)) ENGINE = InnoDB,
PARTITION PART_201910 VALUES LESS THAN (to_days(20191001)) ENGINE = InnoDB,
PARTITION PART_201911 VALUES LESS THAN (to_days(20191101)) ENGINE = InnoDB,
PARTITION PART_201912 VALUES LESS THAN (to_days(20191201)) ENGINE = InnoDB,
PARTITION PART_202001 VALUES LESS THAN (to_days(20200101)) ENGINE = InnoDB,
PARTITION PART_202002 VALUES LESS THAN (to_days(20200201)) ENGINE = InnoDB,
PARTITION PART_202003 VALUES LESS THAN (to_days(20200301)) ENGINE = InnoDB,
PARTITION PART_202004 VALUES LESS THAN (to_days(20200401)) ENGINE = InnoDB,
PARTITION PART_202005 VALUES LESS THAN (to_days(20200501)) ENGINE = InnoDB,
PARTITION PART_202006 VALUES LESS THAN (to_days(20200601)) ENGINE = InnoDB,
PARTITION PART_202007 VALUES LESS THAN (to_days(20200701)) ENGINE = InnoDB,
PARTITION PART_202008 VALUES LESS THAN (to_days(20200801)) ENGINE = InnoDB,
PARTITION PART_202009 VALUES LESS THAN (to_days(20200901)) ENGINE = InnoDB,
PARTITION PART_MAX VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB;
실행계획을 출력하기 위한 조회 구문은 아래와 같습니다.
EXPLAIN PARTITIONS
SELECT to_dt
FROM test
WHERE to_dt BETWEEN DATE_FORMAT('20200720000000', '%Y/%m/%d %H:%i:%S') AND DATE_FORMAT('20200820235959', '%Y/%m/%d %H:%i:%S')
ORDER BY to_dt DESC LIMIT 3000;
이런식으로 조회를 하게 되면 PART_201909,PART_202008,PART_202009 로 결과가 나오게 됩니다.
PART_202008,PART_202009 파티션 사용은 이해가 갑니다만, PART_201909를 왜 사용하는지 알고 싶습니다. |