728x90
파티션
- 대량의 테이블을 물리적으로 여러 개의 테이블로 쪼개기
- 데이터의 분포 특성, 자주 사용되는 쿼리문이 무엇인지에 따라서 효율에 차이가 있음.


- 파티션 구성
- 파티션 테이블에는 Primary Key를 지정하면 안됩니다.
- 데이터 입력 : 입력됨과 동시에 파티션 키에 의해서 데이터가 각 파티션으로 나뉘어 집니다.
- 파티션 확인
- INFORMATION_SCHEMA 데이터베이스의 PARTITIONS 테이블에 관련 정보 있음

- 파티션 나누기
- 파티션3을 1979 ~ 1986 미만(파티션3)과 1986 이상(파티션4)로 분리
- 파티션 분리 : ALTER TABLE... REORGANIZE PARTITION문 사용
- 파티션을 재구성 : OPTIMIZE TABLE문 사용
- 파티션3을 1979 ~ 1986 미만(파티션3)과 1986 이상(파티션4)로 분리

-- 파티션으로 테이블 구현 : 대용량의 테이블을 물리적으로 분할하여 사용
-- sqldb.sql을 이용하여 sqldb 초기화
create database if not exists partdb;
use partdb;
drop table if exists parttbl;
create table parttbl
(
userid char(8) not null, -- primary key 지정 하면 안됨
name varchar(10) not null,
birthyear int not null,
addr char(2) not null
)
partition by range(birthyear)(
partition part1 values less than (1971),
partition part2 values less than (1979),
partition part3 values less than maxvalue
);
insert into parttbl
select userid, name, birthyear, addr from sqldb.usertbl;
-- 파티션 순서로 해서 출력
select * from parttbl;
-- 파티션 확인
select table_schema, table_name, partition_name, partition_ordinal_position, table_rows
from information_schema.partitions
where table_name = 'parttbl';
-- 범위를 이용한 조회 : 1965 년 이전 출생자
select * from parttbl where birthyear <= 1965;
-- explain : 어느 파티션에서 조회를 했는지 확인 : 쿼리문 앞에 추가
explain select * from parttbl where birthyear <= 1965;
-- 파티션 관리 : 분할
-- 현재 파티션 3 -> 1979 ~ 1986 미만 (파티션 3), 1986 이상 ( 파티션 4)
-- ALTER TABLE ....... REORGANIZE PARTITION 문
ALTER TABLE parttbl
reorganize partition part3 into(
partition part3 values less than (1986),
partition part4 values less than maxvalue
);
optimize table parttbl;
-- 파티션 확인
select table_schema, table_name, partition_name, partition_ordinal_position, table_rows
from information_schema.partitions
where table_name = 'parttbl';728x90
'MySQL' 카테고리의 다른 글
| 전체 텍스트 검색.MySQL (0) | 2023.02.10 |
|---|---|
| 트리거(Trigger).MySQL (0) | 2023.02.10 |
| 커서(Cursor).MySQL (0) | 2023.02.10 |
| 스토어드 함수(Stored Function) (0) | 2023.02.10 |
| 스토어드 프로시저(Stored Procedure).MySQL (0) | 2023.02.10 |