ะัะธะฒะตั!
24์ 25์ผ๋ถํฐ 2019์ผ๊น์ง ๋
ธ๋ณด์๋น๋ฅด์คํฌ์์ Highload++ ์๋ฒ ๋ฆฌ์ XNUMX ์ปจํผ๋ฐ์ค๊ฐ ์ด๋ ธ์ต๋๋ค.
์ด๋ฒ ํฌ์คํ
์์๋ ์ค๋ผํด ์ง์์ ํ
์คํธํด ๋ณด์ค ์ ์๋๋ก ์ ํฌ ๋ถ์ค์์ ๊ฒช์๋ ๋ฌธ์ ๋ค์ ๊ณต์ ํด๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ์ปท ์๋์๋ 8๊ฐ์ ๋ฌธ์ , ๋ต๋ณ ์ต์
๋ฐ ์ค๋ช
์ด ์์ต๋๋ค.
๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ํ์๋๋ ์ต๋ ์ํ์ค ๊ฐ์ ๋ฌด์์ ๋๊น?
create sequence s start with 1;
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;
- 1
- 5
- 10
- 25
- ์๋์, ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ต๋ณOracle ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด(8.1.6์์ ์ธ์ฉ):
๋จ์ผ SQL ๋ฌธ ๋ด์์ Oracle์ ํ๋น ํ ๋ฒ๋ง ์ํ์ค๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋ช
๋ น๋ฌธ์ ์ํ์ค์ ๋ํ NEXTVAL์ ๋ํ ์ฐธ์กฐ๊ฐ ๋ ๊ฐ ์ด์ ํฌํจ๋์ด ์์ผ๋ฉด Oracle์ ์ํ์ค๋ฅผ ํ ๋ฒ ์ฆ๊ฐ์ํค๊ณ ๋ชจ๋ NEXTVAL ๋ฐ์์ ๋ํด ๋์ผํ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๋ช
๋ น๋ฌธ์ CURRVAL ๋ฐ NEXTVAL ๋ชจ๋์ ๋ํ ์ฐธ์กฐ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ Oracle์ ๋ช
๋ น๋ฌธ ๋ด ์์์ ๊ด๊ณ์์ด ์ํ์ค๋ฅผ ์ฆ๊ฐ์ํค๊ณ CURRVAL ๋ฐ NEXTVAL ๋ชจ๋์ ๋ํด ๋์ผํ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๋ฐ๋ผ์, ์ต๋๊ฐ์ ์ค ์, ์ฆ 5์ ํด๋นํฉ๋๋ค..
๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด ํ ์ด๋ธ์ ๋ช ๊ฐ์ ํ์ด ํ์๋ฉ๋๊น?
create table t(i integer check (i < 5));
create procedure p(p_from integer, p_to integer) as
begin
for i in p_from .. p_to loop
insert into t values (i);
end loop;
end;
/
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);
- 0
- 3
- 4
- 5
- 6
- 9
๋ต๋ณOracle ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด(11.2์์ ์ธ์ฉ):
SQL ๋ฌธ์ ์คํํ๊ธฐ ์ ์ Oracle์ ์์์ ์ ์ฅ์ (์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์์)์ ํ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฌธ์ด ์คํจํ๋ฉด Oracle์ ์ด๋ฅผ ์๋์ผ๋ก ๋กค๋ฐฑํ๊ณ ํด๋น ์ค๋ฅ ์ฝ๋๋ฅผ SQLCA์ SQLCODE์ ๋ฐํํฉ๋๋ค. ์๋ฅผ ๋ค์ด INSERT ๋ฌธ์ด ๊ณ ์ ์ธ๋ฑ์ค์ ์ค๋ณต๋ ๊ฐ์ ์ฝ์ ํ๋ ค๊ณ ์๋ํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ๋ฌธ์ด ๋กค๋ฐฑ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ์์ HP์ ์ ํํ๋ ๊ฒ๋ ๋จ์ผ ๋ช ๋ น๋ฌธ์ผ๋ก ๊ฐ์ฃผ๋๊ณ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ธ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ์ฒซ ๋ฒ์งธ HP ํธ์ถ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค. ๋ ๋ฒ์งธ HP ํธ์ถ์ ์ค๋ฅ๋ก ์ข ๋ฃ๋๊ณ ์ฝ์ ํ ๋ค ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ๋กค๋ฐฑํฉ๋๋ค. ์ธ ๋ฒ์งธ ํธ์ถ์ด ์คํจํฉ๋๋ค. ํ ์ด๋ธ์ ์ธ ๊ฐ์ ๋ ์ฝ๋๊ฐ ์์ต๋๋ค..
๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด ํ ์ด๋ธ์ ๋ช ๊ฐ์ ํ์ด ํ์๋ฉ๋๊น?
create table t(i integer, constraint i_ch check (i < 3));
begin
insert into t values (1);
insert into t values (null);
insert into t values (2);
insert into t values (null);
insert into t values (3);
insert into t values (null);
insert into t values (4);
insert into t values (null);
insert into t values (5);
exception
when others then
dbms_output.put_line('Oops!');
end;
/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
๋ต๋ณOracle ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด(11.2์์ ์ธ์ฉ):
๊ฒ์ฌ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ์ ๊ฐ ํ์ด ์ถฉ์กฑํด์ผ ํ๋ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ต๋๋ค. ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ค๋ฉด ํ ์ด๋ธ์ ๊ฐ ํ์์ ์กฐ๊ฑด์ TRUE ๋๋ ์ ์ ์์(๋๋ก ์ธํด)์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. Oracle์ด ํน์ ํ์ ๋ํ ๊ฒ์ฌ ์ ์ฝ ์กฐ๊ฑด์ ํ๊ฐํ ๋ ์กฐ๊ฑด์ ๋ชจ๋ ์ด ์ด๋ฆ์ ํด๋น ํ์ ์ด ๊ฐ์ ์ฐธ์กฐํฉ๋๋ค.
๋ฐ๋ผ์ null ๊ฐ์ ๊ฒ์ฌ๋ฅผ ํต๊ณผํ๊ณ ์ต๋ช ๋ธ๋ก์ ๊ฐ 3์ ์ฝ์ ํ๋ ค๊ณ ์๋ํ ๋๊น์ง ์ฑ๊ณต์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ๊ทธ ํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ธ๋ก์ ์์ธ๋ฅผ ์ง์ฐ๊ณ ๋กค๋ฐฑ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ํ ์ด๋ธ์๋ XNUMX๊ฐ์ ํ์ด ๋จ์ต๋๋ค 1, null, 2 ๋ฐ ๋ค์ null ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ค ๊ฐ ์์ด ๋ธ๋ก์์ ๊ฐ์ ์์ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๊น?
create table t (
a char(1 char),
b char(10 char),
c char(100 char),
i number(4),
j number(14),
k number(24),
x varchar2(1 char),
y varchar2(10 char),
z varchar2(100 char));
insert into t (a, b, i, j, x, y)
values ('Y', 'ะะฐัั', 10, 10, 'ะ', 'ะะฐัั');
- A์ X
- B์ Y
- C์ K
- C์ Z
- K์ Z
- ๋์ J
- J์ X
- ๋ชจ๋ ๋์ด
๋ต๋ณ๋ค์์ Oracle์ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ์(12.1.0.2)์์ ๋ฐ์ทํ ๋ด์ฉ์ ๋๋ค.
CHAR ๋ฐ์ดํฐ ์ ํ
CHAR ๋ฐ์ดํฐ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ์งํฉ์ ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ์งํฉ์ ์ง์ ํฉ๋๋ค. Oracle์ CHAR ์ด์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ด ์ ํํ ๊ธธ์ด ์๋ฏธ๋ก ์์ ํฌ๊ธฐ๋ก ์ง์ ๋ ๊ธธ์ด๋ฅผ ๊ฐ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด ๊ธธ์ด๋ณด๋ค ์งง์ ๊ฐ์ ์ฝ์
ํ๋ฉด Oracle์ ํด๋น ๊ฐ์ ์ด ๊ธธ์ด๊น์ง ๊ณต๋ฐฑ์ผ๋ก ์ฑ์๋๋ค.
VARCHAR2 ๋ฐ์ดํฐ ์ ํ
VARCHAR2 ๋ฐ์ดํฐ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ์ธํธ์์ ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ์งํฉ์ ์ง์ ํฉ๋๋ค. Oracle์ ๊ฐ์ด ์ด์ ๊ธธ์ด๋ฅผ ์ด๊ณผํ์ง ์๋ ๊ฒฝ์ฐ ๊ณต๋ฐฑ ์ฑ์ฐ๊ธฐ ์์ด ์ฌ์ฉ์๊ฐ ์ง์ ํ ๋๋ก ์ ํํ VARCHAR2 ์ด์ ๋ฌธ์ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
NUMBER ๋ฐ์ดํฐ ์ ํ
NUMBER ๋ฐ์ดํฐ ์ ํ์ 1.0 x 10-130์์ 1.0 x 10126๊น์ง์ ์ ๋๊ฐ์ ๊ฐ๋ ์์ ๋ฐ ์์ ๊ณ ์ ์ซ์๋ฟ๋ง ์๋๋ผ 1.0๋ ์ ์ฅํฉ๋๋ค. ๊ฐ์ด ๋ค์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ฐ์ ํํ์์ ์ง์ ํ๋ ๊ฒฝ์ฐ 10126 x 1์ด๋ฉด Oracle์ด ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฐ NUMBER ๊ฐ์๋ 22~XNUMX๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ํน์ ์ซ์ ๋ฐ์ดํฐ ๊ฐ NUMBER(p)์ ๋ํ ์ด ํฌ๊ธฐ(๋ฐ์ดํธ)๋ ๋ค์ ๊ณต์์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ p๋ ์ฃผ์ด์ง ๊ฐ์ ์ ๋ฐ๋์
๋๋ค. ROUND((๊ธธ์ด(p)+s)/2))+1 ์ฌ๊ธฐ์ ์ซ์๊ฐ ์์์ด๋ฉด s๋ 1์ด๊ณ , ์ซ์๊ฐ ์์์ด๋ฉด s๋ XNUMX์
๋๋ค.
๋ํ Null ๊ฐ ์ ์ฅ์ ๋ํ ๋ฌธ์์์ ๋ฐ์ทํด ๋ณด๊ฒ ์ต๋๋ค.
Null์ ์ด์ ๊ฐ์ด ์์์ ์๋ฏธํฉ๋๋ค. Null์ ๋๋ฝ๋์๊ฑฐ๋ ์ ์ ์๊ฑฐ๋ ์ ์ฉํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ ๋๋ค. Null์ด ๋ฐ์ดํฐ ๊ฐ์ด ์๋ ์ด ์ฌ์ด์ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ด ๊ธธ์ด(1)๋ฅผ ์ ์ฅํ๋ ค๋ฉด XNUMX๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค. ํ์ ํํ Null์๋ ์ ์ฅ์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ ํ ๋จธ๋ฆฌ๊ธ์ ์ด์ ํ์ ๋๋จธ์ง ์ด์ด Null์ด๋ผ๋ ์ ํธ๋ฅผ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํ ์ด๋ธ์ ๋ง์ง๋ง ์ธ ์ด์ด Null์ธ ๊ฒฝ์ฐ ํด๋น ์ด์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ง ์์ต๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ๋ ์ถ๋ก ์ ๊ตฌ์ถํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ AL32UTF8 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ์ธ์ฝ๋ฉ์์๋ ๋ฌ์์์ด ๋ฌธ์๊ฐ 2๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค.
1) A ๋ฐ X, ํ๋ a 'Y'์ ๊ฐ์ 1๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๊ณ , ํ๋ x 'D'์ ๊ฐ์ 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
2) B ๋ฐ Y, b์ 'Vasya' ๊ฐ์ ์ต๋ 10์์ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ง๊ณ 14๋ฐ์ดํธ๋ฅผ ์ฐจ์งํ๋ฉฐ, d์ 'Vasya'๋ 8๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค.
3) C ๋ฐ K. ๋ ํ๋ ๋ชจ๋ NULL ๊ฐ์ ๊ฐ์ง๋ฉฐ ๊ทธ ๋ค์ ์ค์ํ ํ๋๊ฐ ์์ผ๋ฏ๋ก 1๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค.
4) C ๋ฐ Z. ๋ ํ๋ ๋ชจ๋ NULL ๊ฐ์ ๊ฐ์ง์ง๋ง Z ํ๋๋ ํ
์ด๋ธ์ ๋ง์ง๋ง์ด๋ฏ๋ก ๊ณต๊ฐ(0๋ฐ์ดํธ)์ ์ฐจ์งํ์ง ์์ต๋๋ค. ํ๋ C๋ 1๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค.
5) K์ Z. ์ด์ ์ฌ๋ก์ ์ ์ฌํฉ๋๋ค. K ํ๋์ ๊ฐ์ Z โ 1์์ 0๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค.
6) I์ J. ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๋ ๊ฐ ๋ชจ๋ 2๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค. ๋ฌธ์์์ ๊ฐ์ ธ์จ ๊ณต์์ ์ฌ์ฉํ์ฌ ๊ธธ์ด๋ฅผ ๊ณ์ฐํฉ๋๋ค: round( (1 + 0)/2) +1 = 1 + 1 = 2.
7) J ๋ฐ X. J ํ๋์ ๊ฐ์ 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๊ณ , X ํ๋์ ๊ฐ์ 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ ์ฒด์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ต์ ์ C ๋ฐ K, I ๋ฐ J, J ๋ฐ X์ ๋๋ค.
T_I ์ธ๋ฑ์ค์ ํด๋ฌ์คํฐ๋ง ํฉํฐ๋ ๋๋ต ์ผ๋ง์ ๋๊น?
create table t (i integer);
insert into t select rownum from dual connect by level <= 10000;
create index t_i on t(i);
- ์์ญ๊ฐ ์ ๋
- ์๋ฐฑ๋ช ์ ๋
- ์ฝ ์์ฒ
- ์๋ง๊ฐ ์ ๋
๋ต๋ณOracle ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด(12.1์์ ์ธ์ฉ):
B-ํธ๋ฆฌ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํด๋ฌ์คํฐ๋ง ์์๋ ์ธ๋ฑ์ค ๊ฐ๊ณผ ๊ด๋ จํ์ฌ ํ์ ๋ฌผ๋ฆฌ์ ๊ทธ๋ฃนํ๋ฅผ ์ธก์ ํฉ๋๋ค.
์ธ๋ฑ์ค ํด๋ฌ์คํฐ๋ง ์์๋ ์ต์ ํ ํ๋ก๊ทธ๋จ์ด ํน์ ์ฟผ๋ฆฌ์ ๋ํด ์ธ๋ฑ์ค ์ค์บ ๋๋ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ด ๋ ํจ์จ์ ์ธ์ง ๊ฒฐ์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ฎ์ ํด๋ฌ์คํฐ๋ง ์ธ์๋ ํจ์จ์ ์ธ ์ธ๋ฑ์ค ์ค์บ์ ๋ํ๋ ๋๋ค.
ํ ์ด๋ธ์ ๋ธ๋ก ์์ ๊ฐ๊น์ด ํด๋ฌ์คํฐ๋ง ์์๋ ์ธ๋ฑ์ค ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ ๋ธ๋ก์์ ํ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์์์ ๋ํ๋ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ์ํํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ฑ์ค ํค๋ก ์ ๋ ฌ๋ ๋์คํฌ์ ์ ์ฅ๋ ํ์ ๊ฒ์ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ํ ์์ ๊ฐ๊น์ด ํด๋ฌ์คํฐ๋ง ์์๋ ํ์ด ์ธ๋ฑ์ค ํค์ ๊ด๋ จํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ธ๋ก ์ ์ฒด์ ๋ฌด์์๋ก ๋ถ์ฐ๋์ด ์์์ ๋ํ๋ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ์ํํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด ์ธ๋ฑ์ค ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์์๋ก ํ์ ๊ฒ์ํ์ง ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์ด์์ ์ผ๋ก ์ ๋ ฌ๋๋ฏ๋ก ํด๋ฌ์คํฐ๋ง ์์๋ ํ ์ด๋ธ์์ ์ ์ ๋ ๋ธ๋ก ์์ ๊ฐ๊ฑฐ๋ ๋น์ทํฉ๋๋ค. 8KB์ ํ์ค ๋ธ๋ก ํฌ๊ธฐ์ ๊ฒฝ์ฐ ์ฝ XNUMX๊ฐ์ ์ข์ ์ซ์ ๊ฐ์ด ํ๋์ ๋ธ๋ก์ ๋ค์ด๊ฐ ๊ฒ์ผ๋ก ์์ํ ์ ์์ผ๋ฏ๋ก ๋ธ๋ก ์์ ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋ฌ์คํฐ๋ง ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์ญ๊ฐ ์ ๋.
ํ์ค ์ค์ ์ ์ฌ์ฉํ๋ ์ผ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ค์ ์คํฌ๋ฆฝํธ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ N ๊ฐ์ ๋ฌด์์ ๋๊น?
create table t (
a varchar2(N char),
b varchar2(N char),
c varchar2(N char),
d varchar2(N char));
create index t_i on t (a, b, c, d);
- 100
- 200
- 400
- 800
- 1600
- 3200
- 6400
๋ต๋ณOracle ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด(11.2์์ ์ธ์ฉ):
๋ ผ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ
ํญ๋ชฉ
ํ๋ ์ ํ
ํ๊ณ๊ฐ
์์ธ
์ธ๋ฑ์ฑ๋ ์ด์ ์ ์ฒด ํฌ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ธ๋ก ํฌ๊ธฐ์ 75% - ์ฝ๊ฐ์ ์ค๋ฒํค๋
๋ฐ๋ผ์ ์ธ๋ฑ์ค๋ ์ด์ ์ ์ฒด ํฌ๊ธฐ๋ 6Kb๋ฅผ ์ด๊ณผํด์๋ ์ ๋ฉ๋๋ค. ๋ค์์ ์ผ์ด๋ ์ผ์ ์ ํํ ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. AL32UTF8 ์ธ์ฝ๋ฉ์ ๊ฒฝ์ฐ ํ ๋ฌธ์๊ฐ ์ต๋ 4๋ฐ์ดํธ๋ฅผ ์ฐจ์งํ ์ ์์ผ๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ ์ฝ 6์๊ฐ 1500KB์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Oracle์ N = 400(์ต์ ์ ๊ฒฝ์ฐ ํค ๊ธธ์ด๊ฐ 1600์ * 4๋ฐ์ดํธ + rowid ๊ธธ์ด์ธ ๊ฒฝ์ฐ)์์ ์ธ๋ฑ์ค ์์ฑ์ ํ์ฉํ์ง ์์ต๋๋ค. N = 200(๋๋ ๊ทธ ์ดํ)์์ ์ธ๋ฑ์ค ์์ฑ์ ๋ฌธ์ ์์ด ์๋ํ ๊ฒ์ ๋๋ค.
APPEND ํํธ๊ฐ ํฌํจ๋ INSERT ์ฐ์ฐ์๋ ์ง์ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํธ๋ฆฌ๊ฑฐ๊ฐ ๊ฑธ๋ฆฐ ํ ์ด๋ธ์ ์ ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
- ๋ฐ์ดํฐ๊ฐ ์ง์ ๋ชจ๋๋ก ๋ก๋๋๊ณ ํธ๋ฆฌ๊ฑฐ๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ ์ง์ ๋ชจ๋๋ก ๋ก๋๋์ง๋ง ํธ๋ฆฌ๊ฑฐ๋ ์คํ๋์ง ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ ์ผ๋ฐ ๋ชจ๋๋ก ๋ก๋๋๋ฉฐ ํธ๋ฆฌ๊ฑฐ๋ ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ ์ผ๋ฐ ๋ชจ๋๋ก ๋ก๋๋์ง๋ง ํธ๋ฆฌ๊ฑฐ๋ ์คํ๋์ง ์์ต๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ๋ก๋๋์ง ์๊ณ ์ค๋ฅ๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค.
๋ต๋ณ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ๋ ผ๋ฆฌ์ ๋ฌธ์ ์ ๊ฐ๊น์ต๋๋ค. ์ ๋ต์ ์ฐพ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ถ๋ก ๋ชจ๋ธ์ ์ ์ํฉ๋๋ค.
- ์ง์ ๋ชจ๋์์์ ์ฝ์ ์ SQL ์์ง์ ์ฐํํ์ฌ ๋ฐ์ดํฐ ๋ธ๋ก์ ์ง์ ํ์ฑํ์ฌ ์ํ๋๋ฏ๋ก ๋น ๋ฅธ ์๋๊ฐ ๋ณด์ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํธ๋ฆฌ๊ฑฐ ์คํ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ง๋ ์๋๋ผ๋ ๋งค์ฐ ์ด๋ ต๊ณ ์ฝ์ ์๋๊ฐ ๊ธ๊ฒฉํ ๋๋ ค์ง๋ฏ๋ก ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์์ต๋๋ค.
- ํธ๋ฆฌ๊ฑฐ๋ฅผ ์คํํ์ง ๋ชปํ๋ฉด ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋์ผํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด(๋ค๋ฅธ ํ ์ด๋ธ)์ ์ํ๋ ์ด ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋ ๋ชจ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ด๋ ๋ถ๋ช ํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํ๊ดดํ๋ฏ๋ก ํ๋ก๋์ ์๋ฃจ์ ์ผ๋ก ์ ์ฉํ ์ ์์ต๋๋ค.
- ์์ฒญ๋ ์์ ์ ์ํํ ์ ์๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ค๋ฅ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ APPEND๊ฐ ํํธ์ด๊ณ ํํธ์ ์ผ๋ฐ์ ์ธ ๋ ผ๋ฆฌ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ณ ๋ ค๋์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํํธ๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ์ฐ์ฐ์๊ฐ ์คํ๋๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
๊ทธ๋์ ์์๋๋ ๋๋ต์ ๋ฐ์ดํฐ๋ ์ผ๋ฐ(SQL) ๋ชจ๋๋ก ๋ก๋๋๊ณ ํธ๋ฆฌ๊ฑฐ๊ฐ ์คํ๋ฉ๋๋ค.
Oracle ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด(8.04์์ ์ธ์ฉ):
์ ํ ์ฌํญ์ ์๋ฐํ๋ฉด ๊ฒฝ๊ณ ๋ ์ค๋ฅ ๋ฉ์์ง ์์ด ๊ธฐ์กด ์ฝ์
๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
๋ น๋ฌธ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ์์ธ๋ ํธ๋์ญ์
์์ ๋์ผํ ํ
์ด๋ธ์ ๋ ๋ฒ ์ด์ ์ก์ธ์คํ๋ ๋ช
๋ น๋ฌธ์ ๋ํ ์ ํ์ด๋ฉฐ, ์ด๋ก ์ธํด ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํ
์ด๋ธ์ ํธ๋ฆฌ๊ฑฐ ๋๋ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ด ์๋ ๊ฒฝ์ฐ ์ง์ ๋ก๋ INSERT(์ง๋ ฌ ๋๋ ๋ณ๋ ฌ)๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด APPEND ํํธ๋ ๋ฌผ๋ก PARALLEL ํํธ ๋๋ ์ (์๋ ๊ฒฝ์ฐ)๋ ๋ฌด์๋ฉ๋๋ค.
๋ค์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
create table t(i integer not null primary key, j integer references t);
create trigger t_a_i after insert on t for each row
declare
pragma autonomous_transaction;
begin
insert into t values (:new.i + 1, :new.i);
commit;
end;
/
insert into t values (1, null);
- ์ฑ๊ณต์ ์ธ ์คํ
- ๊ตฌ๋ฌธ ์ค๋ฅ๋ก ์ธํ ์คํจ
- ์ค๋ฅ: ์์จ ๊ฑฐ๋๊ฐ ์ ํจํ์ง ์์ต๋๋ค.
- ์ต๋ ํตํ ์ค์ฒฉ ์ด๊ณผ ๊ด๋ จ ์ค๋ฅ
- ์ธ๋ ํค ์๋ฐ ์ค๋ฅ
- ์ ๊ธ ๊ด๋ จ ์ค๋ฅ
๋ต๋ณํ ์ด๋ธ๊ณผ ํธ๋ฆฌ๊ฑฐ๋ ์์ฃผ ์ ํํ๊ฒ ์์ฑ๋์์ผ๋ฉฐ ์ด ์์ ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํด์๋ ์ ๋ฉ๋๋ค. ํธ๋ฆฌ๊ฑฐ์ ์์จ ํธ๋์ญ์ ๋ ํ์ฉ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ก๊น ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ํ์ ์ฝ์ ํ ํ ์ฑ๊ณต์ ์ผ๋ก ํธ๋ฆฌ๊ฑฐ๊ฐ ์คํ๋๋ฉด ๋ ๋ฒ์งธ ํ์ด ์ฝ์ ๋๊ณ , ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ค์ ์คํ๋๊ณ , ์ธ ๋ฒ์งธ ํ์ด ์ฝ์ ๋๋ ์์ผ๋ก ํธ์ถ์ ์ต๋ ์ค์ฒฉ์ ์ด๊ณผํ์ฌ ๋ช ๋ น๋ฌธ์ด ์คํจํ ๋๊น์ง ๊ณ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ค๋ฅธ ๋ฏธ๋ฌํ ์ ์ด ์์ฉํฉ๋๋ค. ํธ๋ฆฌ๊ฑฐ๊ฐ ์คํ๋ ๋ ์ฒ์ ์ฝ์ ๋ ๋ ์ฝ๋์ ๋ํ ์ปค๋ฐ์ด ์์ง ์๋ฃ๋์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ์์จ ํธ๋์ญ์ ์์ ์คํ๋๋ ํธ๋ฆฌ๊ฑฐ๋ ์์ง ์ปค๋ฐ๋์ง ์์ ๋ ์ฝ๋์ ๋ํ ์ธ๋ ํค๋ฅผ ์ฐธ์กฐํ๋ ํ์ ํ ์ด๋ธ์ ์ฝ์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค. ์ด๋ก ์ธํด ๋๊ธฐ(์์จ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ธฐ๋ณธ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ)๊ฐ ๋ฐ์ํ๊ณ ๋์์ ๊ธฐ๋ณธ ํธ๋์ญ์ ์ ํธ๋ฆฌ๊ฑฐ ํ ์๋ ํธ๋์ญ์ ์ด ๊ณ์ ์๋ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ ์ ๊ธ ๊ด๋ จ ์ฌ์ ๋ก ์์จ ํธ๋์ญ์ ์ด ์ทจ์๋ฉ๋๋ค..
๋ฑ๋ก๋ ์ฌ์ฉ์๋ง ์ค๋ฌธ ์กฐ์ฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
์ด๋ ค์ ๋์?
-
๋ ์๊ฐ๋ฝ์ฒ๋ผ ๋๋ ์ฆ์ ๋ชจ๋ ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒฐ์ ํ์ต๋๋ค.
-
์ฌ์ค์ ์๋๋๋ค. ์ ๊ฐ ๋ช ๊ฐ์ง ์ง๋ฌธ์ ํ๋ ธ์ด์.
-
์ ๋ฐ์ ๋ง์ท์ต๋๋ค.
-
๋ต์ ๋ ๋ฒ ์ถ์ธกํ์ต๋๋ค!
-
๋๊ธ์ ์ ์ด๋ณผ๊ฒ์
14๋ช
์ ์ฌ์ฉ์๊ฐ ํฌํํ์ต๋๋ค. 10๋ช
์ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ถํ์ต๋๋ค.
์ถ์ฒ : habr.com