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 ๊ฐ์ ์ฌ๋ฌ๊ฐ ๋์ดํ์ฌ ์๊ด์ด ์๋ ๋ฐ์ดํฐ ๋ผ๋ฆฌ ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋๊ธ