19.3.5 파티션에 대한 정보 얻기
이 섹션에서는 기존의 파티션에 대한 정보를 얻는 방법 (여러 가지 방법이 가능)에 대해 설명합니다. 그런 정보를 취득하는 방법에는 다음이 포함됩니다.
SHOW CREATE TABLE
문을 사용하여 파티션 된 테이블을 만드는 데 사용 된 파티셔닝 절을 표시한다.SHOW TABLE STATUS
문을 사용하여 테이블이 분할되어 있는지 여부를 판별한다.INFORMATION_SCHEMA.PARTITIONS
테이블을 조회한다.EXPLAIN PARTITIONS SELECT
문을 사용하여 지정된SELECT
에 의해 어떤 파티션이 사용되었는지를 확인한다.
이 장의 다른 곳에서 설명하고있는 바와 같이, SHOW CREATE TABLE
의 출력에는 파티션 된 테이블을 만드는 데 사용 된 PARTITION BY
절이 포함되어 있습니다. 예 :
mysql> SHOW CREATE TABLE trb3\G
*************************** 1. row ***************************
Table: trb3
Create Table: CREATE TABLE `trb3` (
`id` int(11) default NULL,
`name` varchar(50) default NULL,
`purchased` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
PARTITION BY RANGE (YEAR(purchased)) (
PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (2000) ENGINE = MyISAM,
PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM
)
1 row in set (0.00 sec)
파티션 된 테이블에 대한 SHOW TABLE STATUS
의 출력은 Create_options
컬럼에 문자열 partitioned
가 포함 된 것을 제외하고는 분할되지 않은 테이블의 경우와 동일합니다. Engine
컬럼은 테이블의 모든 파티션에서 사용되는 스토리지 엔진의 이름이 포함됩니다. (이 문에 대한 자세한 내용은 섹션 13.7.5.37 "SHOW TABLE STATUS 구문" 을 참조하십시오).
파티션에 대한 정보는 PARTITIONS
테이블을 포함 INFORMATION_SCHEMA
에서 얻을 수 있습니다. 섹션 21.13 "INFORMATION_SCHEMA PARTITIONS 테이블" 을 참조하십시오.
지정된 SELECT
쿼리에서 파티션 된 테이블의 모든 파티션이 사용되는지는 EXPLAIN PARTITIONS
를 사용하여 확인할 수 있습니다. PARTITIONS
키워드는 partitions
컬럼 (어떤 파티션의 레코드가 쿼리에서 조합되는지를 목록)을 EXPLAIN
의 출력에 추가합니다.
테이블 trb1
가 다음과 같이 작성되어 채워져 있다고합니다.
CREATE TABLE trb1 (id INT, name VARCHAR(50), purchased DATE) PARTITION BY RANGE(id) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (7), PARTITION p2 VALUES LESS THAN (9), PARTITION p3 VALUES LESS THAN (11) ); INSERT INTO trb1 VALUES (1, 'desk organiser', '2003-10-15'), (2, 'CD player', '1993-11-05'), (3, 'TV set', '1996-03-10'), (4, 'bookcase', '1982-01-10'), (5, 'exercise bike', '2004-05-09'), (6, 'sofa', '1987-06-05'), (7, 'popcorn maker', '2001-11-22'), (8, 'aquarium', '1992-08-04'), (9, 'study desk', '1984-09-16'), (10, 'lava lamp', '1998-12-25');
SELECT * FROM trb1;
같은 쿼리에서 어떤 파티션이 사용되는지를 다음과 같이 확인할 수 있습니다.
mysql> EXPLAIN PARTITIONS SELECT * FROM trb1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: trb1
partitions: p0,p1,p2,p3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using filesort
이 경우 4 개의 파티션이 검색됩니다. 그러나 다음과 같이 파티셔닝 키를 사용하는 제한 조건을 쿼리에 추가하면 일치하는 값이 들어있는 파티션 만 검색되는 것을 알 수 있습니다.
mysql> EXPLAIN PARTITIONS SELECT * FROM trb1 WHERE id < 5\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: trb1
partitions: p0,p1
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using where
EXPLAIN PARTITIONS
는 보통 EXPLAIN SELECT
문뿐만 아니라 사용되는 키 및 사용할 수있는 키에 대한 정보가 표시됩니다.
mysql>ALTER TABLE trb1 ADD PRIMARY KEY (id);
Query OK, 10 rows affected (0.03 sec) Records: 10 Duplicates: 0 Warnings: 0 mysql>EXPLAIN PARTITIONS SELECT * FROM trb1 WHERE id < 5\G
*************************** 1. row *************************** id: 1 select_type: SIMPLE table: trb1 partitions: p0,p1 type: range possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: NULL rows: 7 Extra: Using where
EXPLAIN PARTITIONS
관한 다음의 규제 및 제한에 주목하십시오.
EXTENDED
및PARTITIONS
키워드는 동일한EXPLAIN ... SELECT
문에서 함께 사용할 수 없습니다. 그렇게하려고하면 구문 오류가 발생합니다.쿼리를 검사하기 위해 분할되지 않은 테이블에서
EXPLAIN PARTITIONS
을 사용하면 오류가 발생하지 않지만partitions
컬럼의 값은 항상NULL
입니다.
EXPLAIN PARTITIONS
출력의 rows
컬럼은 테이블의 총 행수가 표시됩니다.
섹션 13.8.2 "EXPLAIN 구문" 을 참조하십시오.