๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ
- ์งํ ๋จ๊ณ
- Build ๋จ๊ณ: ์์ ์ชฝ ํ ์ด๋ธ(Build Input)์ ์ฝ์ด ํด์ ํ ์ด๋ธ(ํด์ ๋งต) ์์ฑ
- Probe ๋จ๊ณ: ํฐ ์ชฝ ํ ์ด๋ธ(Probe Input)์ ์ฝ์ด ํด์ ํ ์ด๋ธ์ ํ์ํ๋ฉด์ ์กฐ์ธ
-- ์ฌ์ ํ
์ด๋ธ ๊ธฐ์ค(ordered)์ผ๋ก ๊ณ ๊ฐ ํ
์ด๋ธ๊ณผ ์กฐ์ธํ ๋ ํด์ ์กฐ์ธ(use_hash) ํ๋ผ
select /*+ ordered use_hash(c) */
e.์ฌ์๋ฒํธ, e.์ฌ์๋ช
, e.์
์ฌ์ผ์
, c.๊ณ ๊ฐ๋ฒํธ, c.๊ณ ๊ฐ๋ช
, c.์ ํ๋ฒํธ, c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก
from ์ฌ์ e, ๊ณ ๊ฐ c
where c.๊ด๋ฆฌ์ฌ์๋ฒํธ = e.์ฌ์๋ฒํธ
and e.์
์ฌ์ผ์ >= '19960101'
and e.๋ถ์์ฝ๋ = 'Z123'
and c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000

- Build ๋จ๊ณ์์ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ํด์ ํ
์ด๋ธ ์์ฑ
- ์กฐ์ธ์ปฌ๋ผ์ธ ์ฌ์๋ฒํธ๋ฅผ ํด์ ํ
์ด๋ธ ํค ๊ฐ์ผ๋ก
- ์ฌ์๋ฒํธ๋ฅผ ํด์ ํจ์์ ์ ๋ ฅํด์ ๋ฐํ๋ ๊ฐ์ผ๋ก ํด์ ์ฒด์ธ ์ฐพ๊ณ , ๊ทธ ํด์ ์ฒด์ธ์ ๋ฐ์ดํฐ ์ฐ๊ฒฐ
- ํด์ ํ
์ด๋ธ์ PGA์ ํ ๋น๋ Hash Area์ ์ ์ฅ
- PGA๊ฐ ๋ถ์กฑํ๋ฉด, Temp ํ ์ด๋ธ ์คํ์ด์ค ์ฌ์ฉ
- ์กฐ์ธ์ปฌ๋ผ์ธ ์ฌ์๋ฒํธ๋ฅผ ํด์ ํ
์ด๋ธ ํค ๊ฐ์ผ๋ก
select ์ฌ์๋ฒํธ, ์ฌ์๋ช
, ์
์ฌ์ผ์
from ์ฌ์
where ์
์ฌ์ผ์ >= '19960101'
and ๋ถ์์ฝ๋ = 'Z123'
- Probe ๋จ๊ณ์์ ์๋ ์กฐ๊ฑด์ ํด๋นํ๋ ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ฝ์ด ์์ ์์ฑํ ํด์ ํ
์ด๋ธ์ ํ์
- ๊ด๋ฆฌ์ฌ์๋ฒํธ๋ฅผ ํด์ ํจ์์ ์
๋ ฅํด ๋ฐํ๋ ๊ฐ์ ํด์ ์ฒด์ธ์ ์ฐพ๊ณ , ํด์ ์ฒด์ธ์ ์ค์บํด ๊ฐ์ด ๊ฐ์ ์ฌ์๋ฒํธ ์ฐพ์
- ์ฐพ์ผ๋ฉด ์กฐ์ธ ์ฑ๊ณต, ๋ชป ์ฐพ์ผ๋ฉด ์คํจ
- ๊ด๋ฆฌ์ฌ์๋ฒํธ๋ฅผ ํด์ ํจ์์ ์
๋ ฅํด ๋ฐํ๋ ๊ฐ์ ํด์ ์ฒด์ธ์ ์ฐพ๊ณ , ํด์ ์ฒด์ธ์ ์ค์บํด ๊ฐ์ด ๊ฐ์ ์ฌ์๋ฒํธ ์ฐพ์
select ๊ณ ๊ฐ๋ฒํธ, ๊ณ ๊ฐ๋ช
, ์ ํ๋ฒํธ, ์ต์ข
์ฃผ๋ฌธ๊ธ์ก, ๊ด๋ฆฌ์ฌ์๋ฒํธ
from ๊ณ ๊ฐ
where ์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
- Build ๋จ๊ณ์์ ์ฌ์ฉํ ํด์ ํจ์๋ฅผ Probe ๋จ๊ณ์์๋ ์ฌ์ฉํ๋ฏ๋ก ๊ฐ์ ์ฌ์๋ฒํธ๋ฅผ ์
๋ ฅํ๋ฉด ๊ฐ์ ํด์ ๊ฐ์ด ๋ฐํ
- ํด์ ํจ์๊ฐ ๋ฐํํ ๊ฐ์ ํด๋นํ๋ ํด์ ์ฒด์ธ๋ง ์ค์บ
begin
for outer in (select ๊ณ ๊ฐ๋ฒํธ, ๊ณ ๊ฐ๋ช
, ์ ํ๋ฒํธ, ์ต์ข
์ฃผ๋ฌธ๊ธ์ก, ๊ด๋ฆฌ์ฌ์๋ฒํธ
from ๊ณ ๊ฐ
where ์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000)
loop -- outer ๋ฃจํ
for inner in (select ์ฌ์๋ฒํธ, ์ฌ์๋ช
, ์
์ฌ์ผ์
from PGA์_์์ฑํ_์ฌ์_ํด์๋งต
where ์ฌ์๋ฒํธ = outer.๊ด๋ฆฌ์ฌ์๋ฒํธ)
loop -- inner ๋ฃจํ
dbms_output.put_line( ... );
end loop;
end loop;
end;
- Probe ๋จ๊ณ๋ NL์กฐ์ธ๊ณผ ๋ค๋ฅด์ง ์์

ํด์ ์กฐ์ธ์ด ๋น ๋ฅธ ์ด์
- Hash Aread์ ์์ฑํ ํด์ ํ
์ด๋ธ์ ์ด์ฉํ๋ค๋ ์ ๋ง ๋ค๋ฅผ ๋ฟ ํด์ ์กฐ์ธ๋ NL ์กฐ์ธ๊ณผ ์กฐ์ธ ํ๋ก์ธ์ค๊ฐ ๋์ผ
- ํด์ ํ ์ด๋ธ์ PGA ์์ญ์ ํ ๋นํ๊ธฐ ๋๋ฌธ์ NL ์กฐ์ธ๋ณด๋ค ๋น ๋ฆ
- NL ์กฐ์ธ์ Outer ํ ์ด๋ธ ๋ ์ฝ๋๋ง๋ค Inner ํ ์ด๋ธ ๋ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ํด ๋์น ํ๋ ๋ฐ ์บ์๋ฒํผ ์ฒด์ธ ์ค์บ ๊ณผ์ ๋ฐ๋ณต
- ํด์ ์กฐ์ธ์ ๋์น ํ๋ ๊ณผ์ ์์ด PGA์์ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ํ์ํ๊ณ ์กฐ์ธ
- ํด์ ์กฐ์ธ๋ Build Input๊ณผ Probe Input ๊ฐ ํ
์ด๋ธ์ ์ฝ์ ๋ DB ๋ฒํผ์บ์ ๊ฒฝ์
- ์ด๋ ์ธ๋ฑ์ค ์ด์ฉํ๊ธฐ๋ ํจ
- ๋ฒํผ์บ์ ํ์ ๋น์ฉ ๋ฐ ๋๋ค ์์ธ์ค ๋ถํ ๋ฐ์ ๊ฐ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก ํด์ ์กฐ์ธ์ด ์ํธ ๋จธ์ง ์กฐ์ธ๋ณด๋ค ๋น ๋ฅธ ์ด์
- ์กฐ์ธ ์คํผ๋ ์ด์
์ ์์ํ๊ธฐ ์ ์ฌ์ ์ค๋น์์
์ฐจ์ด
- ์ํธ ๋จธ์ง ์กฐ์ธ์์ ์ฌ์ ์ค๋น์์
์ ์์ชฝ ์งํฉ์ ๋ชจ๋ ์ ๋ ฌํด PGA์ ์ ์ฌ
- PGA๋ ํฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์๋๋ฏ๋ก, ๋ ์งํฉ ์ค ์ด๋ ํ๋๊ฐ ์ค๋ํ ์ด์์ด๋ฉด Temp ํ ์ด๋ธ์คํ์ด์ค, ๋์คํฌ์ ์ฐ๋ ์์ ์๋ฐ
- ํด์ ์กฐ์ธ์์ ์ฌ์ ์ค๋น์์
์ ์ด๋ ํ์ชฝ์ ์ฝ์ด ํด์ ๋งต์ ๋ง๋๋ ์์
- ๋ ์ค ์์ ์งํฉ์ ํด์ ๋งต Build Input์ผ๋ก ์ ํ
- ๋ ์งํฉ ๋ชจ๋ Hash Area์ ๋ด์ ์ ์๋ ํฌ๊ธฐ๊ฐ ์๋๋ผ๋ฉด, Temp ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์์
- ์ํธ ๋จธ์ง ์กฐ์ธ์์ ์ฌ์ ์ค๋น์์
์ ์์ชฝ ์งํฉ์ ๋ชจ๋ ์ ๋ ฌํด PGA์ ์ ์ฌ
- ์กฐ์ธ ์คํผ๋ ์ด์
์ ์์ํ๊ธฐ ์ ์ฌ์ ์ค๋น์์
์ฐจ์ด
- ํด์ ์กฐ์ธ์ NL ์กฐ์ธ์ฒ๋ผ ์กฐ์ธ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋๋ค ์์ธ์ค ๋ถํ๊ฐ ์๊ณ , ์ํธ ๋จธ์ง ์กฐ์ธ์ฒ๋ผ ์์ชฝ ์งํฉ์ ๋ฏธ๋ฆฌ ์ ๋ ฌํ๋ ๋ถํ๋ ์์
- ํด์ ํ ์ด๋ธ์ ์์ฑํ๋ ๋น์ฉ์, ๋ ์ค ์์ ์งํฉ์ Build Input์ผ๋ก ์ ํํ๋ฏ๋ก ๋ถ๋ด์ด ํฌ์ง ์์
- Build Input์ด PGA ๋ฉ๋ชจ๋ฆฌ์ ๋ด๊ฒจ ์ธ๋ฉ๋ชจ๋ฆฌ ํด์ ์กฐ์ธ์ผ ๋ ๊ฐ์ฅ ํจ๊ณผ์
- Build Input์ด Hash Area๋ฅผ ์ด๊ณผํด Temp ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ฐ๊ฒ ๋๋๋ผ๋, ๋๋ ๋ฐ์ดํฐ ์กฐ์ธ์ ํด์ ์กฐ์ธ์ด ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฆ
ํด์ ํ ์ด๋ธ์ ๋ด๊ธฐ๋ ์ ๋ณด
- ์กฐ์ธ ํค๊ฐ ๋ฟ๋ง ์๋๋ผ SQL์ ์ฌ์ฉํ ์ปฌ๋ผ ๋ชจ๋ ์ ์ฅ
- ๋ง์ฝ ํค ๊ฐ๋ง ์ ์ฅํ๋ค๋ฉด, ๋์น ํ๋ ๊ณผ์ ์์ด PGA์์ ์กฐ์ธํ๋ค๋ ํด์ ์กฐ์ธ์ ์ฅ์ ์ด ์ฌ๋ผ์ง
- ์กฐ์ธ์ ์ฑ๊ณตํ ํค์ ๋ํ ๋๋จธ์ง ์ ๋ณด๋ฅผ ์ฝ์ผ๋ ค๋ฉด ROWID๋ก ๋ค์ ํ ์ด๋ธ ๋ธ๋ก์ ์์ธ์คํด์ผ ํ๊ธฐ ๋๋ฌธ
๋์ฉ๋ Build Input ์ฒ๋ฆฌ

- ๋ ํ
์ด๋ธ ๋ชจ๋ ๋์ฉ๋ ํ
์ด๋ธ์ด์ด์ ์ธ๋ฉ๋ชจ๋ฆฌ ํด์ ์กฐ์ธ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๋ถํ /์ ๋ณต ๋ฐฉ์์ผ๋ก ์งํ
ํํฐ์ ๋จ๊ณ
- ์กฐ์ธํ๋ ์์ชฝ ์งํฉ(์กฐ์ธ ์ด์ธ์ ์กฐ๊ฑด์ ์ ๋ง์กฑํ๋ ๋ ์ฝ๋)์ ์กฐ์ธ ์ปฌ๋ผ์ ํด์ ํจ์ ์ ์ฉํ๊ณ , ๋ฐํ๋ ํด์ ๊ฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ํํฐ์ ๋
- ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ ์์ ์๋ธ ์งํฉ์ผ๋ก ๋ถํ ํจ์ผ๋ก์จ ํํฐ์ pair ์์ฑ

- ์์ชฝ ์งํฉ์ ์ฝ์ด ๋์คํธ Temp ๊ณต๊ฐ์ ์ ์ฅํด์ผ ํ๋ฏ๋ก, ์ธ๋ฉ๋ชจ๋ฆฌ ํด์ ์กฐ์ธ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง
์กฐ์ธ ๋จ๊ณ
- ๊ฐ ํํฐ์
pair์ ๋ํด ํ๋์ฉ ์กฐ์ธ์ ์ํ
- ๊ฐ๊ฐ์ ๋ํ Build Input๊ณผ Probe Input์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฐ์
- ํํฐ์ ํ๊ธฐ ์ ์ด๋ ์ชฝ์ด ์์ ํ ์ด๋ธ์ด์๋์ง ์๊ด ์์ด, ๊ฐ ํํฐ์ pair๋ณ๋ก ์์ ์ชฝ์ Build Input์ผ๋ก ํด์ ํ ์ด๋ธ ์์ฑ
- ํด์ ํ ์ด๋ธ ์์ฑํ๊ณ ๋๋ฉด ๋ฐ๋์ชฝ ํํฐ์ ๋ก์ฐ๋ฅผ ํ๋์ฉ ์ฝ์ผ๋ฉด์ ํด์ ํ ์ด๋ธ์ ํ์
- ๋ชจ๋ ํํฐ์ pair์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ง์น ๋๊น์ง ๋ฐ๋ณต
- ๊ฐ ํํฐ์
pair์ ๋ํด ํ๋์ฉ ์กฐ์ธ์ ์ํ
ํด์ ์กฐ์ธ ์คํ๊ณํ ์ ์ด
-- ์์ชฝ ํ
์ด๋ธ์ Build Input์ผ๋ก ํด์ ํ
์ด๋ธ์ ์์ฑํ ํ, ์๋์ชฝ ํ
์ด๋ธ(Probe Input)์์ ์ฝ์ ์กฐ์ธ ํค๊ฐ์ผ๋ก ํด์ ํ
์ด๋ธ์ ํ์ํ๋ฉด์ ์กฐ์ธ
-- Build/Probe Input์ ์ฝ์ ๋ ์ธ๋ฑ์ค ์ด์ฉ(Table Full Scan๋ ๊ฐ๋ฅ)
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS
1 0 HASH JOIN
2 1 TABLE ACCESS (BY INDEX ROWID) OF '์ฌ์' (TABLE)
3 2 INDEX (RANGE SCAN) OF '์ฌ์_X1' (INDEX)
4 1 TABLE ACCESS (BY INDEX ROWID) OF '๊ณ ๊ฐ' (TABLE)
5 4 INDEX (RANGE SCAN) OF '๊ณ ๊ฐ_N1' (INDEX)
-- use_hash ํํธ๋ก ์ ์ด
-- use_hash๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ, Build Input์ ์ตํฐ๋ง์ด์ ๊ฐ ๊ฒฐ์ (๋ณดํต ๊ฐ ํ
์ด๋ธ ์กฐ๊ฑด์ ์ ๋ํ ์นด๋๋๋ฆฌํฐ๊ฐ ์์ ํ
์ด๋ธ)
select /*+ use_hash(e c) */
e.์ฌ์๋ฒํธ, e.์ฌ์๋ช
, e.์
์ฌ์ผ์
, c.๊ณ ๊ฐ๋ฒํธ, c.๊ณ ๊ฐ๋ช
, c.์ ํ๋ฒํธ, c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก
from ์ฌ์ e, ๊ณ ๊ฐ c
where c.๊ด๋ฆฌ์ฌ์๋ฒํธ = e.์ฌ์๋ฒํธ
and e.์
์ฌ์ผ์ >= '19960101'
and e.๋ถ์์ฝ๋ = 'Z123'
and c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
-- leading/ordered๋ก Build Input ์ง์ ๊ฐ๋ฅ(ํํธ๋ก ์ง์ํ ์์์ ๋ฐ๋ผ ๊ฐ์ฅ ๋จผ์ ์ฝ๋ ํ
์ด๋ธ)
select /*+ leading(e) use_hash(c) */ -- ๋๋ ordered use_hash(c)
e.์ฌ์๋ฒํธ, e.์ฌ์๋ช
, e.์
์ฌ์ผ์
, c.๊ณ ๊ฐ๋ฒํธ, c.๊ณ ๊ฐ๋ช
, c.์ ํ๋ฒํธ, c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก
from ์ฌ์ e, ๊ณ ๊ฐ c
where c.๊ด๋ฆฌ์ฌ์๋ฒํธ = e.์ฌ์๋ฒํธ
and e.์
์ฌ์ผ์ >= '19960101'
and e.๋ถ์์ฝ๋ = 'Z123'
and c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
-- swap_join_inputs๋ก Build Input ๋ช
์์ ์ผ๋ก ์ ํ ๊ฐ๋ฅ
select /*+ leading(e) use_hash(c) swap_join_inputs(c) */
e.์ฌ์๋ฒํธ, e.์ฌ์๋ช
, e.์
์ฌ์ผ์
, c.๊ณ ๊ฐ๋ฒํธ, c.๊ณ ๊ฐ๋ช
, c.์ ํ๋ฒํธ, c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก
from ์ฌ์ e, ๊ณ ๊ฐ c
where c.๊ด๋ฆฌ์ฌ์๋ฒํธ = e.์ฌ์๋ฒํธ
and e.์
์ฌ์ผ์ >= '19960101'
and e.๋ถ์์ฝ๋ = 'Z123'
and c.์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
์ธ ๊ฐ ์ด์ ํ ์ด๋ธ ํด์ ์กฐ์ธ
- A, B, C ํ
์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ
๊ฒฝ๋ก1
- A์ B๋ฅผ ์กฐ์ธํ๊ณ , B์ C๋ฅผ ์กฐ์ธ
select * from A, B, C where A.key = B.key and B.key = C.key๊ฒฝ๋ก2
- A์ B๋ฅผ ์กฐ์ธํ๊ณ , A์ C๋ฅผ ์กฐ์ธ
select * from A, B, C where A.key = B.key and A.key = C.key๋ ๋ฐฉ๋ฒ์ ๋ณธ์ง์ ์ผ๋ก ๊ฐ์
- ํ
์ด๋ธ T1, T2, T3๊ฐ ์๊ณ T1๊ณผ T2๋ฅผ, T2์ T3๋ฅผ ์กฐ์ธํ๋ค๊ณ ํ ๋
- ๊ฒฝ๋ก1์ T1 = A, T2 = B, T3 = C
- ๊ฒฝ๋ก2๋ T1 = B, T2 = A, T3 = C
- ํ
์ด๋ธ T1, T2, T3๊ฐ ์๊ณ T1๊ณผ T2๋ฅผ, T2์ T3๋ฅผ ์กฐ์ธํ๋ค๊ณ ํ ๋
select /*+ leading(T1, T2, T3) use_hash(T2) use_hash(T3) */
from T1, T2, T3
where T1.key = T2.key
and T2.key = T3.key
ํด์ ์กฐ์ธ์์ leading ํํธ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ง์ ํ ํ ์ด๋ธ์ด Build Input
- T1์ด T2์ ์กฐ์ธํ ๋๋ Build Input
- ๊ฐ๋ฅํ ์คํ๊ณํ ํจํด
-- ํจํด1 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS 1 0 HASH JOIN 2 1 HASH JOIN 3 2 TABLE ACCESS (FULL) OF 'T1' (TABLE) 4 2 TABLE ACCESS (FULL) OF 'T2' (TABLE) 5 1 TABLE ACCESS (FULL) OF 'T3' (TABLE) -- ํจํด2 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS 1 0 HASH JOIN 2 1 TABLE ACCESS (FULL) OF 'T3' (TABLE) 3 1 HASH JOIN 4 3 TABLE ACCESS (FULL) OF 'T1' (TABLE) 5 3 TABLE ACCESS (FULL) OF 'T2' (TABLE)-- T2๋ฅผ Build Input์ผ๋ก ์ ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ -- leading(T1, T2, T3) swap_join_inputs(T2) ์ฒ๋ผ swap_join_inputs ํํธ ์ฌ์ฉ -- ํจํด1 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS 1 0 HASH JOIN 2 1 HASH JOIN 3 2 TABLE ACCESS (FULL) OF 'T2' (TABLE) 4 2 TABLE ACCESS (FULL) OF 'T1' (TABLE) 5 1 TABLE ACCESS (FULL) OF 'T3' (TABLE) -- ํจํด2 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS 1 0 HASH JOIN 2 1 TABLE ACCESS (FULL) OF 'T3' (TABLE) 3 1 HASH JOIN 4 3 TABLE ACCESS (FULL) OF 'T2' (TABLE) 5 3 TABLE ACCESS (FULL) OF 'T1' (TABLE)- ํจํด 1์ 2๋ก ๋ฐ๊พธ๋ ค๋ฉด, T3๊ฐ Build Input์ด ๋ผ์ผ ํ๋ฏ๋ก swap_join_inputs๋ก ๊ฐ๋ฅ
select /*+ leading(T1, T2, T3) swap_join_inputs(T3) */ select /*+ leading(T1, T2, T3) swap_join_inputs(T2) swap_join_inputs(T3) */
์กฐ์ธ ๋ฉ์๋ ์ ํ ๊ธฐ์ค

- ์๋ ๋ฐ์ดํฐ ์กฐ์ธํ ๋๋ NL ์กฐ์ธ
- ๋๋ ๋ฐ์ดํฐ ์กฐ์ธํ ๋๋ ํด์ ์กฐ์ธ
- ์กฐ์ธ ์กฐ๊ฑด์์ด ๋ฑ์น(=) ์กฐ๊ฑด์ด ์๋๋ผ ํด์ ์กฐ์ธ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ ๋๋ ์ํธ ๋จธ์ง ์กฐ์ธ
- ์นดํ ์์ ๊ณฑ ํฌํจ
- ์กฐ์ธ ์กฐ๊ฑด์์ด ๋ฑ์น(=) ์กฐ๊ฑด์ด ์๋๋ผ ํด์ ์กฐ์ธ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ ๋๋ ์ํธ ๋จธ์ง ์กฐ์ธ
- ์๋๊ณผ ๋๋์ ๊ธฐ์ค
- NL ์กฐ์ธ ๊ธฐ์ค์ผ๋ก ์ต์ ํํ๋๋ฐ๋ ๋๋ค ์์ธ์ค๊ฐ ๋ง์ ๋ง์กฑํ ๋งํ ์ฑ๋ฅ์ ๋ผ ์ ์๋ ๊ฒฝ์ฐ
- ์ํ๋น๋๊ฐ ๋งค์ฐ ๋์ ์ฟผ๋ฆฌ์ ๋ํด์๋
- ์ต์ ํ๋ NL์กฐ์ธ๊ณผ ํด์ ์กฐ์ธ ์ฑ๋ฅ์ด ๊ฐ์ผ๋ฉด NL์กฐ์ธ
- ํด์ ์กฐ์ธ์ด ์ฝ๊ฐ ๋ ๋นจ๋ผ๋ NL ์กฐ์ธ
- NL์กฐ์ธ ๋ณด๋ค ํด์ ์กฐ์ธ์ด ๋งค์ฐ ๋น ๋ฅธ ๊ฒฝ์ฐ ํด์ ์กฐ์ธ
- ๋ณดํต ๋๋ ๋ฐ์ดํฐ ์กฐ์ธ
- NL์กฐ์ธ์ ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ คํ๋ ์ด์
- ์ธ๋ฑ์ค๋ Dropํ์ง ์๋ ํ, ์๊ตฌ์ ์ผ๋ก ์ ์งํ๋ฉด์ ๋ค์ํ ์ฟผ๋ฆฌ๋ฅผ ์ํด ๊ณต์ ๋ฐ ์ฌ์ฌ์ฉ