파티셔닝된 테이블 생성
이 단계에서는 MySQL 에 데이터베이스와 파티션된 테이블을 생성합니다. 파티셔닝은 지정된 규칙에 따라 테이블을 더 작고 관리하기 쉬운 부분으로 분할하여 대규모 데이터셋을 관리하는 데 도움이 됩니다. 특히 파티셔닝 키를 기준으로 데이터를 필터링하는 쿼리의 성능을 크게 향상시킬 수 있습니다.
먼저 LabEx VM 에서 터미널을 엽니다. 이미 ~/project 디렉토리에 있어야 합니다.
루트 사용자로 MySQL 서버에 연결합니다 (랩 시작 시 한 번만 수행):
sudo mysql -u root
이제 MySQL 셸에 접속했습니다. 랩이 끝날 때까지 후속 SQL 명령은 이 세션에서 실행해야 합니다.
테이블을 저장할 sales_data라는 데이터베이스를 생성해 보겠습니다.
CREATE DATABASE sales_data;
새로 생성된 데이터베이스로 전환합니다.
USE sales_data;
이제 sales라는 테이블을 생성하고 sale_date 열의 연도를 기준으로 파티셔닝합니다. 2020 년, 2021 년, 2022 년, 2023 년 및 향후 날짜에 대한 캐치올 (catch-all) 파티션을 생성합니다.
CREATE TABLE sales (
sale_id INT NOT NULL,
sale_date DATE NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (sale_id, sale_date)
)
PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION pFuture VALUES LESS THAN MAXVALUE
);
PARTITION BY RANGE 절을 이해해 보겠습니다.
PARTITION BY RANGE (YEAR(sale_date)): sale_date 열에 적용된 YEAR() 함수의 반환 값 범위를 기준으로 테이블이 파티셔닝됨을 지정합니다.
PARTITION p2020 VALUES LESS THAN (2021): p2020이라는 파티션을 생성합니다. sale_date의 연도가 2021 년 미만 (즉, 2020 년) 인 모든 행은 이 파티션에 저장됩니다.
PARTITION p2021 VALUES LESS THAN (2022): 2021 년 데이터에 대한 p2021이라는 파티션을 생성합니다.
PARTITION p2022 VALUES LESS THAN (2023): 2022 년 데이터에 대한 p2022이라는 파티션을 생성합니다.
PARTITION p2023 VALUES LESS THAN (2024): 2023 년 데이터에 대한 p2023이라는 파티션을 생성합니다.
PARTITION pFuture VALUES LESS THAN MAXVALUE: sale_date의 연도가 2024 년 이상인 모든 데이터를 저장할 pFuture라는 파티션을 생성합니다. MAXVALUE는 다른 모든 값보다 항상 큰 특수 값입니다.
CREATE TABLE 문을 실행한 후 다음 명령을 사용하여 테이블 구조와 파티션을 확인할 수 있습니다.
SHOW CREATE TABLE sales;
출력에서 PARTITION BY RANGE 절을 찾아 테이블이 지정된 파티션으로 생성되었는지 확인합니다.
이제 sales 테이블에 샘플 데이터를 삽입해 보겠습니다. MySQL 은 sale_date를 기준으로 각 행을 올바른 파티션에 자동으로 배치합니다.
INSERT INTO sales (sale_id, sale_date, amount) VALUES
(1, '2020-12-31', 100.00),
(2, '2021-01-15', 150.00),
(3, '2021-12-25', 200.00),
(4, '2022-06-01', 120.00),
(5, '2022-12-31', 180.00),
(6, '2023-03-10', 250.00),
(7, '2023-09-20', 300.00),
(8, '2024-01-01', 350.00);
파티션된 테이블을 성공적으로 생성하고 데이터를 삽입했습니다. 다음 단계에서는 특정 파티션에서 데이터를 쿼리하는 방법을 배웁니다.