MySQL

파티션.MySQL

john_ 2023. 2. 10. 18:53
728x90

파티션

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

파티션 개념도

 

파티션 구성

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

 

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


-- 파티션으로 테이블 구현 : 대용량의 테이블을 물리적으로 분할하여 사용
-- 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