๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/ADMIN

[Oracle] List Partition Table ์‹ค์Šต ๋ฐ ์ •๋ฆฌ

by ๐ŸŒปโ™š 2020. 7. 23.

List Partition Table

Object๋ผ๋Š” ๊ฒƒ์€ ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Segment๋Š” Object๋“ค ์ค‘์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”๋กœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์€ ํ•˜๋‚˜์˜ Segment๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์ด์งˆ ์ˆ˜๋ก ์ฟผ๋ฆฌ์ž‘์—…์„ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด๋”๋ผ๋„ ํŠน์ • ๊ธฐ์ค€์œผ๋กœ ์—ฌ๋Ÿฌ Segment๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ฒ”์œ„์—์„œ๋งŒ ์กฐํšŒ๋ฅผ ํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด 2015๋…„๋„์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ ์‹ถ์€๋ฐ  Table์—๋Š” 1990๋…„๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ–‰์„ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Full Table Scan ์ž‘์—…์„ ํ•˜๊ฒŒ๋ ํ…๋ฐ 1990๋…„๋„ ๋ถ€ํ„ฐ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์ •๋ง ์˜ค๋ž˜ ๊ฑธ๋ฆด๊ฒ๋‹ˆ๋‹ค. ์ด๋Ÿด๋•Œ ๊ธฐ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ Partition์„ ์žก์•„์„œ Segment๋ฅผ ๋‚˜๋ˆ„๋ฉด 2015๋…„๋„๋กœ ๋งŒ๋“ค์–ด์ง„ Segment๋ฅผ ์ฐพ์•„ ํƒ์ƒ‰ํ•˜์—ฌ ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋กœ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ• ๊ฒ๋‹ˆ๋‹ค.

 

 Partition Table์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ์„ฑ๋Šฅ๋„ ์ข‹์•„์ง€๊ฒŒ๋˜์–ด ์ž์ฃผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Partition Table์€ ์ฃผ๋กœ ์˜ค๋žœ ๊ธฐ๊ฐ„ ์Œ“์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๊ฐ„ ๋ฒ”์œ„๋กœ ์žก๊ณ  ํ˜„์žฅ์—์„œ๋Š” 90%์ด์ƒ ์ •๋ณด๋‹ค Range Partition Table์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Range Partition์„ ๋‹ค๋ฃจ๊ธฐ ์ „์— ํŠน์ • ์นผ๋Ÿผ์˜ ๊ฐ’์œผ๋กœ Partition ์ž‘์—…์„ ํ•˜๋Š” List Partition Table์„ ์ด์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

List Partition Table ์‹ค์Šต

์‹ค์Šตํ™˜๊ฒฝ

OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID : orcl
host : 601d2fce71dc
user : scott

 

 

Partition Table ์ƒ์„ฑ

SCOTT@orcl>
create table dept_test
(
    deptno number
    ,dname varchar2(20)
)
partition by list(deptno)
(
    partition dept_10 values(10)
    ,partition dept_20 values(20)
    ,partition dept_30 values(30)
    ,partition dept_40 values(40)
);

dept_test๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ   deptno ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ 4๊ฐœ์˜ segment ์ €์žฅ๊ณต๊ฐ„์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

SCOTT@orcl> 
select 
    table_name
    ,partitioning_type
    ,partition_count
    ,status 
from user_part_tables;

 

SCOTT@orcl> 
select 
    table_name
    ,partition_name
    ,high_value
from user_tab_partitions;

์—ฌ๋Ÿฌ ๋ทฐ๋“ค์„ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•œ Partition์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Data Insert

SCOTT@orcl> insert into dept_test select deptno, dname from dept;

๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์ด์ „์— data๋ฅผ insert ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Data Select

SCOTT@orcl> select * from dept_test;

๋จผ์ € ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

 

SCOTT@orcl> set autot trace explain
SCOTT@orcl> select * from dept_test;

์‹คํ–‰ ๊ณ„ํš๋งŒ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด autotrace๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. Table Full Scan ์ž‘์—…์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ Partition List ์ „์ฒด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

SCOTT@orcl> set autot off
SCOTT@orcl> select * from dept_test partition(dept_10);

์ด๋ฒˆ์—๋Š” ํ•ด๋‹น Partition์˜ ๋‚ด์šฉ๋งŒ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. partition์˜ ์ด๋ฆ„์„ ๊ฐ–๊ณ  ๋ถ€์„œ ๋ฒˆํ˜ธ๊ฐ€ 10์ธ partition์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

 

SCOTT@orcl> set autot trace explain
SCOTT@orcl> select * from dept_test partition(dept_10);

์‹คํ–‰๊ณ„ํš์„ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ด๋ฒˆ์—๋Š” Full Table Scan ์ž‘์—…์„ SINGILE Partition์—์„œ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

๋Œ€๋ถ€๋ถ„์˜ Partition Table์€ Range๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„์—์„œ ์ž‘์—…ํ•œ List Partition Table์€ ์–ธ์ œ ์‚ฌ์šฉ๋ ๊นŒ์š”? ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ง ๋งŽ๊ณ  SQL WHERE์ ˆ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ๊ท ๋“ฑํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„ํฌ๋˜์–ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•˜๋‚˜์˜ ์žฅ์ ์œผ๋กœ ์—ฐ๊ด€๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃจํ•‘ ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

create table dept_test
(
    deptno number
    ,dname varchar2(20)
)
partition by list(deptno)
(
    partition dept_30_under values(10,20,30)
    ,partition dept_40_upper values(40,50,60,70)
);

์œ„์™€ ๊ฐ™์ด partition list์˜ values ๊ฐ’์„ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์—ดํ•˜์—ฌ ์ƒ๊ด€์ด ์—†๋Š” ๋ฐ์ดํ„ฐ ๋ผ๋ฆฌ ๋ฌถ์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋Œ“๊ธ€