์กฐ์ํ๋์ ์น์ ํ SQL ํ๋์ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
NL ์กฐ์ธ์ Nested Loop ์กฐ์ธ์ ์ฝ์๋ก ์ค์ฒฉ ๋ฃจํ ๋ฌธ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์กฐ์ธ์ด ์ด๋ฃจ์ด์ง๋ค.
์ ๋ ํ ์ด๋ธ๋ฅผ ์ฌ์ ๋ฒํธ๋ก ์กฐ์ธํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
ํ๋ก๊ทธ๋๋ฐ ์์ผ๋ก ๋ก์ง์ ๊ตฌํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
for(int i=0;i<์ฌ์.size();i++){
for(int j=0;j<๊ณ ๊ฐ.size();j++){
if(์ฌ์[i].๋ฒํธ == ๊ณ ๊ฐ[j].๊ด๋ฆฌ์ฌ์๋ฒํธ){
// ์ฐพ์ผ๋ ค๋ ๋ ์ฝ๋
}
}
}
์ฌ์ ํ ์ด๋ธ์ ์ฌ์๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ ๊ฐ ํ ์ด๋ธ ์ ์ฒด ๋ ์ฝ๋๋ฅผ ์ํํ์ฌ ๊ธฐ์ค์ธ ์ฌ์๋ฒํธ์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ๊นฅ์ชฝ ๋ฃจํ์ ํด๋นํ๋ ํ ์ด๋ธ์ Outer Table์ด๋ผ ํ๊ณ ์์ชฝ์ ์๋ ํ ์ด๋ธ์ Inner Table์ด๋ผ๊ณ ํ๋ค.
๐ก Outer์ Inner๋ฅผ ๊ตณ์ด ๋๋ ์ด์ ๋ ๋์ ์๋ฆฌ๋ฅผ ์ดํด๋ณด๋ฉด ํฐ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Outer Table์ ์๋ ๋ ์ฝ๋๋ ํ์ค์บ์ ํ๋๋ผ๊ณ ํ๋ฒ์ ๊ทธ์น์ง๋ง, ๐จ Inner Table์ ํ์ค์บํ๊ฒ ๋๋ฉด Outer Table์ ๋ ์ฝ๋ ์ ๋งํผ ํ์ค์บ์ ํด์ผ๋๋ค.
๋นํจ์จ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ก , ๋ ํ ์ด๋ธ์ ํ์ค์บํด์ ์ฐพ๋ ๊ฒ์ ์๋๊ณ ์ธ๋ฑ์ค ํ ์ด๋ธ์ ์ฌ์ฉํ๋ค.
์๋ก, ์ฌ์ ํ ์ด๋ธ์ ์ ์ฌ์ผ์๋ก ์ธ๋ฑ์ค๊ฐ ๊ตฌ์ฑ๋์ด ์๊ณ ๊ณ ๊ฐ ํ ์ด๋ธ์ ๊ด๋ฆฌ ์ฌ์ ๋ฒํธ๋ก ์ธ๋ฑ์ฑ ๋์ด ์๋ค๋ฉด
select * from ์ฌ์ e, ๊ณ ๊ฐ c
where e.์
์ฌ์ผ์ >= '19960101'
and c.๊ด๋ฆฌ์ฌ์๋ฒํธ = e.์ฌ์๋ฒํธ
์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํ ํ ๋
์ ์ฌ ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ์ฌ์์ ์ธ๋ฑ์ค ํ ์ด๋ธ์์ ์ ์ฌ์ผ์ ์กฐ๊ฑด์ ๋ง๋ ์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ์ฐพ๊ณ
ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅํ๊ณ ์๋ ํ ์ด๋ธ ๋ธ๋ก ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํ ์ด๋ธ ๋ธ๋ก์ ์ ๊ทผํ์ฌ ์ฌ์๋ฒํธ๋ฅผ ์์๋ด๊ณ
์ฌ์๋ฒํธ๋ก ์ ๋ ฌ๋์ด ์๋ ๊ณ ๊ฐ์ ์ธ๋ฑ์ค ํ ์ด๋ธ์์ ์ด์ ์ ์ฐพ์ ์ฌ์ ๋ฒํธ ์กฐ๊ฑด์ ๋ง๋ ์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ์ฐพ์ ์ต์ข ์ ์ผ๋ก ์ฌ์ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ก ์ ๊ทผํ๋ ๋ฐฉ์์ด๋ค.
์ด 2๋ฒ์ ์ธ๋ฑ์ค ํ ์ด๋ธ์ ๊ฑฐ์น๊ฒ ๋๋ค.
๐จ ๋ง์ฝ, ์ธ๋ฑ์ค๋ก ์ ๊ทผํ์ง ์์๋ค๋ฉด, ๊ณ ๊ฐ ํ ์ด๋ธ์ ํ์ค์บํ์ฌ ์ฐพ์ผ๋ ค๋ ์ฌ์๋ฒํธ๋ฅผ ๊ฐ์ง ๋ ์ฝ๋๋ฅผ ์ฐพ์์ผ ํ๋๋ฐ ์ด๋ ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์๋ค.
NL ์กฐ์ธ ํ๋ํด๋ณด๊ธฐ
SELECT * FROM ์ฌ์ e, ๊ณ ๊ฐ c
WHERE e.์
์ฌ์ผ์ >= '19960101'
AND e.๋ถ์์ฝ๋ = 'Z123'
AND c.๊ด๋ฆฌ์ฌ์๋ฒํธ = e.์ฌ์๋ฒํธ
AND c. ์ต์ข
์ฃผ๋ฌธ๊ธ์ก >= 20000
์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํ ํ,
ROWS | OPERATION
5 |NESTED LOOPS
3 | TABLE ACCESS BY INDEX ROWID OF ์ฌ์
2780 | INDEX RANGE SCAN OF ์ฌ์_X1
5 | TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
8 | INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1
// ์ฌ์_X1 = ์
์ฌ์ผ์
// ๊ณ ๊ฐ_X1 = ๊ด๋ฆฌ์ฌ์๋ฒํธ
์ฟผ๋ฆฌ ์คํ ์ ํธ๋ ์ด์ค ๊ฒฐ๊ณผ๊ฐ ์์ ๊ฐ๋ค๊ณ ํ์ ๋, ๋ฌด์์ด ๋ฌธ์ ์ผ๊น?
1๏ธโฃ ๋จผ์ , ์ธ๋ฑ์ค์ธ ์ ์ฌ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ์ฝ๋๋ฅผ ํํฐ๋งํ๊ณ , ํ ์ด๋ธ์ ๋๋ค ์์ธ์คํ ํ์๊ฐ 2780๋ฒ์ธ ๊ฒ์ ๋ฐํด
์ต์ข ์ ์ผ๋ก ๋ถ์ ์ฝ๋๋ก ๊ฑธ๋ฌ์ง ๊ฒฐ๊ณผ๋ 3๊ฑด์ ๊ทธ์น๋ค.
๋๋ค I/O๋ฅผ ์ค์ด๊ธฐ ์ํด [์ ์ฌ์ผ์ + ๋ถ์์ฝ๋] ๋ก ๊ตฌ์ฑ๋ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ณ ์ฌ์ฉํ๋ค๋ฉด ๋๋ค I/O๋ฅผ ์ค์ผ ์ ์์ ๊ฒ์ด๋ค.
2๏ธโฃ ์ด๋ ๊ฒ ์๋ก์ด ์ธ๋ฑ์ค๋ฅผ ์ ์ํ๋ค๊ณ ๋๋ ๋ฌธ์ ๊ฐ ์๋๋ค. ๊ฐ ๋จ๊ณ์ ์ฒ๋ฆฌ ๊ฑด์๋ฅผ ํ์ธํด๋ณด๊ณ , [์ ์ฌ์ผ์ + ๋ถ์์ฝ๋] ๋ก ๊ตฌ์ฑํ์๋์ [๋ถ์์ฝ๋ + ์ ์ฌ์ผ์] ๋ก ๊ตฌ์ฑํ์๋๋ฅผ ๋น๊ตํด๋ณด๊ณ ๋ ์ข์ ์ฑ๋ฅ์ ๊ฐ์ถ ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ธ์ง ํ๋จํ๊ณ ๊ฒฐ์ ํ๋ฉด ๋ ์ข์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.