...

ํํฐ์ (partition)
- โ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ ์ฅํ ๋, ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ณ๋์ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํด์ ์ ์ฅ์ํค๋ ๊ธฐ๋ฒ์ ๋งํ๋ค.
- ๋จ, mysql๋ด๋ถ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, ํํฐ์ ์ด ์ผ๋ง๋ ์๋ ์ฌ์ฉ์๋ ํ๋์ ํ ์ด๋ธ๋ก ๋ณด์ธ๋ค.

- ํน์ DML๊ณผ Query์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ , ์ฃผ๋ก ๋ฐ์ดํฐ๊ฐ ์ค์๊ฐ์ผ๋ก ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ฒฝ์์ ํจ์จ์ ์ด๋ค.
- ํนํ Full Scan์์ ๋ฐ์ดํฐ์ ์ ๊ทผ ๋ฒ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ๋ฌผ๋ฆฌ์ ์ธ ํํฐ์ ๋์ผ๋ก ์ธํด ์ ์ฒด ๋ฐ์ดํฐ์ ํผ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๋ฉฐ, ๊ฐ ํํฐ์ ๋ณ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฑ์ ํ๊ณ ๋ณต๊ตฌํ ์ ์๋ค.
- ๋ค๋ง, ํ ์ด๋ธ ๊ฐ Join์ด ์ผ์ด๋ ๊ฒฝ์ฐ ๋น์ฉ์ด ์ฆ๊ฐํ๋ฉฐ ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๋ณ๋๋ก ํํฐ์ ๋ ํ ์๋ ์๋ค.
ํํฐ์ ์ข ๋ฅ
- ๊ธฐ๋ณธ์ ์ผ๋ก ํํฐ์ ๋์ ์ํ ๋ถํ ๊ณผ ์์ง ๋ถํ ์ ์ฌ์ฉํด์ ๋ถํ ํ๋๋ฐ, ๋ถํ ๊ธฐ์ค์ ๋ฐ๋ฅธ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค.


ํํฐ์ ์ฌ์ฉ๋ฒ

ํํฐ์ ํ ์ด๋ธ ์์ฑ
create database if not exists partDB ;
use partDB ;
drop table if exists partTbl ;
create table partTbl (
userID char(8) not null,
name varchar(10) not null,
birthYear INT not null, -- ์์ผ๋ ์ง๊ฐ ํํฐ์
๋ฒ์ ๋๋ก ์ ๋ ฌ๋๋ค.
addr char(2) not null
)
partition by range(birthYear) ( -- ์ถ์๋
๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ๋ค.
partition part1 values less than (1970), -- 1970๋
์ดํ
partition part2 values less than (1978), -- 1971 ~ 1978
partition part3 values less than MAXVALUE -- 1979 ~
) ;
insert into partTbl select userID, name, birthYear, addr from sqlDB.userTbl ;
-- ํ
์ด๋ธ ๋ฐ์ดํฐ ๋ณต์ฌ
select * from partTbl where birthYear <= 1965 ;
-- ํํฐ์
์ ์๋ ์ ์ฒด ํ
์ด๋ธ์ ๋ค ๋ค์ก์ง๋ง, ํํฐ์
์ ๋๋์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฒ์์ธ part1 ํํฐ์
๋ง ๋ค์ ธ์ ์ฑ๋ฅ์ด ์ฌ๋ผ๊ฐ๋ค.
โ
ํํฐ์ ํ์ธ
select table_schema, table_name, partition_name, partition_ordinal_position, table_rows
from information_schema.partitions
where table_name = 'partTbl' ;
explain partitions select * from partTbl where birthYear <= 1965 ;
-- ์ด๋ค ํํฐ์
์์ ๋ค์ง๋์ง ํ์ธ ์ฉ๋
โ
ํํฐ์ ๋ ์ชผ๊ฐ๊ธฐ
alter table partTbl
reorganize partition part3 into (
partition part3 values less than (1985), -- ํํฐ์
3์ ๋ ์ชผ๊ฐฐ๋ค.
partition part4 values less than MAXVALUE
) ;
optimize table partTbl ; -- ํํฐ์
์์
๋ ํ
์ด๋ธ ์ ์ฉ
โ
ํํฐ์ ํฉ์น๊ธฐ
alter table partTbl
reorganize partition part1, part2 into (
-- part1์ part2 ํํฐ์
์ ํฉ์ณ์ ์๋ก์ด ํํฐ์
part12๋ฅผ ๋ง๋ ๋ค.
partition part12 values less than (1978)
) ;
โ
optimize table partTbl ;
โ
ํํฐ์ ์ญ์
- ํํฐ์ ์ ์ง์ฐ๋ฉด, ๊ทธ ํํฐ์ ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ ์ง์์ง๋ค.
alter table partTbl drop partition part12 ;
โ
optimize table partTbl ;
ํํฐ์ ์ฃผ์ํ ์
- ํํฐ์ ํ ์ด๋ธ์๋ ์ธ๋ ํค๋ฅผ ์ค์ ํ ์ ์๋ค. (๋ถ๋ชจ ํ ์ด๋ธ๋ก์์ ์ญํ ๋ง ๋จ)
- ๊ทธ๋ฌ๋ฏ๋ก ๋จ๋ ์ผ๋ก๋ง ์ฌ์ฉ๋๋ ํ ์ด๋ธ์๋ง ํํฐ์ ์ ์ค์ ํ ์ ์๋ค.
- ์คํ ์ด๋ ํ๋ก์์ , ์คํ ์ด๋ ํจ์, ์ฌ์ฉ์ ๋ณ์ ๋ฑ์ ํํฐ์ ์์ ์ฌ์ฉํ ์ ์๋ค.
- ์์ ํ ์ด๋ธ(with)์ ํํฐ์ ์ ์ฌ์ฉํ ์ ์๋ค.
- ํํฐ์ ํค์๋ ์ผ๋ถ ํจ์๋ง ์ฌ์ฉํ ์ ์๋ค.
- MySQL์ ํํฐ์ ๊ฐ์๋ ์ต๋ 1,024๊ฐ๊น์ง ์ง์ํ๋ค.
- ๋ ์ธ์ง ํํฐ์ ์ ์ซ์ํ ์ฐ์๋ ๋ฒ์๋ฅผ ์ฌ์ฉํ๊ณ
- ๋ฆฌ์คํธ ํํฐ์
์ ์ซ์ํ ๋๋ ๋ฌธ์ํ ์ฐ์๋์ง ์์ ๊ฐ(์ง์ญ๋ณ, ํ์กํ ๋ฑ)์ ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ ๋ฆฌ์คํธ ํํฐ์ ์ MAXVALUE๊ฐ๋ ์ด ์กด์ฌํ์ง ์๋๋ค.
โ
์ธ์ฉํ ๋ถ๋ถ์ ์์ด ๋ง์ผ ๋๋ฝ๋ ์ถ์ฒ๊ฐ ์๋ค๋ฉด ๋ฐ๋์ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.