header-img
Info :
728x90

Nested Loop ์กฐ์ธ

- ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฐพ๊ณ , ๊ทธ ๋‹ค์Œ ํ…Œ์ด๋ธ”์€ ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹

- ๋จผ์ € ์กฐํšŒ ๋˜๋Š” ํ…Œ์ด๋ธ”์„ Outer Table ์ด๋ผ๊ณ  ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์กฐํšŒ๋˜๋Š” ํ…Œ์ด๋ธ”์„ Inner Table.

   ์ฝ”๋”ฉ ํ˜•ํƒœ๋กœ ์„ค์ •ํ•ด๋ณด์ž๋ฉด...

 for(i=0; i<dept.length; i++) { // Outer table
    for(j=0; j<emp.length; j++) { // Inner table
       // Search
    } 
}

 

์‚ฌ์šฉ๋ฒ• ์˜ˆ์‹œ

select /* ordered use_nl(b) */ *
from EMP a, DEPT b
where a.DEPTNO = b.DEPTNO
    and a.DEPTNO = 10;

 

์žฅ๋‹จ์ 

1. ์ธ๋ฑ์Šค์— ์˜ํ•œ Random access ์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ์ ํ•ฉํ•˜์ง€ ์•Š์Œ.

2. Driving Table๋กœ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๊ฑฐ๋‚˜, where ์ ˆ ์กฐ๊ฑด์œผ๋กœ row๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด์–ด์•ผ ํ•จ.

3. Driven Table์—๋Š” ์กฐ์ธ์„ ์œ„ํ•œ ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ.

4. ์„ ํ–‰ ํ…Œ์ด๋ธ”์˜ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ํ›„ํ–‰ ํ…Œ์ด๋ธ”์„ ์—‘์„ธ์Šคํ•  ๋•Œ Random I/O๊ฐ€ ์ผ์–ด๋‚จ : ์ด๊ฒƒ์„ ์ค„์—ฌ์•ผ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋จ.

 

์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ Driving Table(Outer Table) ์œ ๋„ ๋ฐฉ๋ฒ•

1. ํžŒํŠธ(Hint) ์‚ฌ์šฉ 

/*+ORDERED*/				-- from์ ˆ์— ๊ธฐ์ˆ ํ•œ ํ…Œ์ด๋ธ” ์ˆœ์„œ๋Œ€๋กœ ์ œ์–ด
/*+LEADING (table๋ช…)*/		-- ํžŒํŠธ ๋‚ด์— ์ œ์‹œ๋œ ํ…Œ์ด๋ธ”์ด ๋“œ๋ผ์ด๋น™์œผ๋กœ ์ฒ˜๋ฆฌ๋จ

๋‘˜ ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋˜, 2๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด LEADING ํžŒํŠธ๋Š” ์ ์šฉ ์•ˆ๋จ.

 

2. ๋ทฐ ์‚ฌ์šฉ

 

Sort Merge ์กฐ์ธ

- ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ SORT_AREA ๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ชจ๋‘ ๋กœ๋”ฉ(loading)ํ•˜๊ณ  Sort๋ฅผ ์ˆ˜ํ–‰

- ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ SORT๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๋ณ‘ํ•ฉ(Merge)ํ•จ

- ์กฐํšŒ ๋ฒ”์œ„๊ฐ€ ๋งŽ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธ ๋ฐฉ๋ฒ•๋ก . ์ฃผ๋กœ ์กฐ์ธ ์กฐ๊ฑด ์นผ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ฑฐ๋‚˜, ์ถœ๋ ฅํ•ด์•ผ ํ•  ๊ฒฐ๊ณผ ๊ฐ’์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ๋จ.

- Nest Loop Join์˜ ์กฐ์ธ ๋ฐฉ์‹๊ณผ ์žฅ๋‹จ์  ๋ฉด์—์„œ ์ƒ๋ฐ˜๋œ ๋งค๋ ฅ์„ ๊ฐ€์ง.

- ์ •๋ ฌ ๋ฐ์ดํ„ฐ ์–‘์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด, ์ •๋ ฌ์€ ์ž„์‹œ ์˜์—ญ์—์„œ ์ˆ˜ํ–‰๋จ. ์ž„์‹œ ์˜์—ญ์€ ๋””์Šคํฌ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์ง.

 

์‚ฌ์šฉ๋ฒ• ์˜ˆ์‹œ

select /* ordered use_merge(A B)*/ A.Color, B.SIZE,...
from TABLE_A A,TABLE_B B
where a.joinkey_a = b.joinkey_b -- join key์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ํ…Œ์ด๋ธ” ๋‘˜ ๋ชจ๋‘ ๋‹ค ์—†์Œ
and a.color = 'RED' --์ธ๋ฑ์Šค ์žˆ์Œ
and b.size = 'MED'; --์ธ๋ฑ์Šค ์—†์Œ

 

์‚ฌ์šฉํ•˜๋Š” ์ผ€์ด์Šค

1. ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ์— ์ธ๋ฑ์Šค๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ฒฝ์šฐ

2. ๋Œ€์šฉ๋Ÿ‰์˜ ์ž๋ฃŒ๋ฅผ ์กฐ์ธํ•  ๋•Œ

3. ์กฐ์ธ ์กฐ๊ฑด์œผ๋กœ >, <, <=, >= ์™€ ๊ฐ™์€ ๋ฒ”์œ„ ๋น„๊ต ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ

4. ์ธ๋ฑ์Šค ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ๋žœ๋ค ์—‘์„ธ์Šค์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ

 

์„ฑ๋Šฅ ๊ฐœ์„  ํฌ์ธํŠธ

1. Access ํ•˜๋Š” ์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚จ๋‹ค.

ํ…Œ์ด๋ธ”์„ Access ํ•  ๋•Œ Full table scan์ด๋ƒ Index Range Scan์ด๋ƒ ํ•˜๋Š” ๋“ฑ์˜ ํ…Œ์ด๋ธ” ์—‘์„ธ์Šค ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ†ตํ•˜์—ฌ ์ตœ์ ํ™” ์‹œํ‚จ๋‹ค๋ฉด Sort Merge Join์˜ ์†๋„๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ

2. ์ •๋ ฌ ์†๋„์˜ ํ–ฅ์ƒ

3. ์–‘์ชฝ์˜ ์ •๋ ฌ๊นŒ์ง€ ์™„๋ฃŒ๋˜๋Š” ์†๋„๋ฅผ ๋งž์ถฐ์ค€๋‹ค.

์–‘์ชฝ ํ…Œ์ด๋ธ”์„ access ํ•˜๊ณ  ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ •๋ ฌํ•  ๋•Œ์—, ์–ด๋Š ํ•œ ์ชฝ์ด๋ผ๋„ ์ •๋ ฌ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ํ•œ ์ชฝ์ด ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ๋‹ค๋ฅธ ํ•œ์ชฝ์˜ ์ •๋ ฌ์ด ์™„์ „ํžˆ ๋๋‚  ๋•Œ๊นŒ์ง€ ์กฐ์ธ์ด ์‹œ์ž‘๋  ์ˆ˜ ์—†์Œ. ๋น„๊ตํ•ด์•ผ ํ•  ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์–‘์ด๋‚˜ ์ •๋ ฌ ์†๋„๋ฅผ ์ตœ๋Œ€ํ•œ ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ์ด ํšจ์œจ์ .

4. SORT_AREA_SIZE ์ตœ์ ํ™”

 

Hash ์กฐ์ธ

- ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ” ์ค‘ ์ž‘์€ ํ…Œ์ด๋ธ”์„ Hash ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉํ•˜๊ณ , ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์˜ ์กฐ์ธํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•จ.

- ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU ์—ฐ์‚ฐ์„ ๋งŽ์ด ํ•จ.

- ์ฃผ๋กœ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋จ.

 

์‚ฌ์šฉ๋ฒ• ์˜ˆ์‹œ

select /* + ordered use_hash(b) */ * 
from emp a, dept b
where a.DEPTNO = b.DEPTNO
    and a.DEPTNO = 10 ;

 

์‚ฌ์šฉํ•˜๋Š” ์ผ€์ด์Šค

1. Join ์ปฌ๋Ÿผ์— ์ ๋‹นํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด nested loop ์กฐ์ธ ๊ฑฐ๋Š” ๊ฒŒ ๋น„ํšจ์œจ์ ์ผ ๋•Œ

2. Join Access ์–‘์ด ๋งŽ์ด Random Access ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•˜์—ฌ nested loop๊ฐ€ ๋น„ํšจ์œจ์ ์ผ ๋•Œ

3. Sort Merge Join์„ ํ•˜๊ธฐ์—๋Š” ๋‘ ํ…Œ์ด๋ธ”์ด ๋„ˆ๋ฌด ์ปค Sort ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•  ๋•Œ

4. ์ˆ˜ํ–‰ ๋นˆ๋„๊ฐ€ ๋‚ฎ๊ณ  ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ๊ธฐ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์„ JOINํ•  ๋•Œ 

 

์„ฑ๋Šฅ ๊ฐœ์„  ํฌ์ธํŠธ

1. Hash Table์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ํšจ์œจํ™”ํ•œ๋‹ค.

Hash Table๋กœ ๋งŒ๋“ค Build Input์ด Hash Area์— ๋‹ด๊ธธ ์ •๋„๋กœ ์ถฉ๋ถ„ํžˆ ์ž‘์•„์•ผ ํ•˜๋ฉฐ, Build Input ํ•ด์‹œ ํ‚ค ์ปฌ๋Ÿผ์— ์ค‘๋ณต ๊ฐ’์ด ๊ฑฐ์˜ ์—†์–ด์•ผ ํšจ์œจ์ ์ธ ๋™์ž‘์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Œ.

2. CPU์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•œ๋‹ค.

3. ์ถฉ๋ถ„ํ•œ PGA ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด

 

728x90
๋”๋ณด๊ธฐ
BACKEND/๊ณต๋ถ€