๊ด€๋ฆฌ ๋ฉ”๋‰ด

gi_dor

๐Ÿ”‘ SQL ํŠœ๋‹ - CH 4. ์กฐ์ธ ํŠœ๋‹ - ํ•ด์‹œ ์กฐ์ธ ๋ณธ๋ฌธ

First/SQL ํŠœ๋‹

๐Ÿ”‘ SQL ํŠœ๋‹ - CH 4. ์กฐ์ธ ํŠœ๋‹ - ํ•ด์‹œ ์กฐ์ธ

๊ธฐ๋Œ 2023. 8. 18. 17:48
728x90

 ๐Ÿ›ต HASH JOIN

NL์กฐ์ธ์€ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ ์กฐ์ธ ๋ฐฉ์‹์ด๋‹ค , ์ธ๋ฑ์Šค ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์‹ฌํ•˜๋‹ค

๋ฐ˜๋ฉด ์†ŒํŠธ๋จธ์ง€ ์กฐ์ธ๊ณผ ํ•ด์‹œ์กฐ์ธ์€ , ์กฐ์ธ ๊ณผ์ •์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—
' ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐ์ธํ• ๋•Œ NL ์กฐ์ธ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ  , ์ผ์ •ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค'

์†ŒํŠธ๋จธ์ง€ ์กฐ์ธ์€ ํ•ญ์ƒ ์–‘์ชฝ ํ…Œ์ด๋ธ”์„ ์ •๋ ฌ ํ•˜๋Š” ๋ถ€๋‹ด์ด ์žˆ๋‹ค
ํ•ด์‹œ ์กฐ์ธ์€ ๊ทธ๋Ÿฐ ๋ถ€๋‹ด์ด ์—†๋‹ค

๊ทธ๋ ‡๋‹ค๊ณ  ๋ชจ๋“  ์กฐ์ธ์„ ํ•ด์‹œ์กฐ์ธ์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ˆ˜๋Š” ์—†๋‹ค

1 - 1 ๊ธฐ๋ณธ ๋ฉ”์ปค๋‹ˆ์ฆ˜

ํ•ด์‹œ์กฐ์ธ์€ ์†ŒํŠธ๋จธ์ง€ ์กฐ์ธ์ฒ˜๋Ÿผ 2๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋œ๋‹ค

  • Build ๋‹จ๊ณ„ : ์ž‘์€ ์ชฝ ํ…Œ์ด๋ธ”์„ ์ฝ์–ด ํ•ด์‹œ ํ…Œ์ด๋ธ”(ํ•ด์‹œ ๋งต)์„ ์ƒ์„ฑ
  • Probe ๋‹จ๊ณ„ : ํฐ ์ชฝ ํ…Œ์ด๋ธ”์„ ์ฝ์–ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์กฐ์ธํ•œ๋‹ค

 

ํ•ด์‹œ ์กฐ์ธ์€ use_hagh ํžŒํŠธ๋กœ ์œ ๋„ํ•˜๋Š”๋ฐ 
์‚ฌ์› ํ…Œ์ด๋ธ” ๊ธฐ์ค€ ์œผ๋กœ ๊ณ ๊ฐ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ ํ•  ๋•Œ ํ•ด์‹œ ์กฐ์ธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์ง€์‹œํ•œ๋‹ค.

 

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
;

1 ) Build ๋‹จ๊ณ„

  • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ํ•ด์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ 
  • ์กฐ์ธ ์ปฌ๋Ÿผ์ธ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ” key ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ , ์ฆ‰ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜์— ์ž…๋ ฅ ํ•ด์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์œผ๋กœ 
    ํ•ด์‹œ ์ฒด์ธ์„ ์ฐพ์•„ ์ฒด์ธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ
    ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์ปค์„œ PGA์— ๋‹ด์„์ˆ˜ ์—†์œผ๋ฉด Temp ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค์— ์ €์žฅ๋œ๋‹ค.

2 ) Probe ๋‹จ๊ณ„

  • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด ์•ž์— ์ƒ์„ฑํ•œ ํ•ด์‹œํ…Œ์ด๋ธ”์„ ํƒ์ƒ‰ํ•œ๋‹ค
  • ๊ด€๋ฆฌ์‚ฌ๋ฒˆ์œผ๋กœ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด ๋ฐ˜ํ™˜๋œ ๊ฐ’์œผ๋กœ ํ•ด์‹œ ์ฒด์ธ์„ ์ฐพ์•„ ์Šค์บ”ํ•ด์„œ ๊ฐ’์ด ๊ฐ™์€ ์‚ฌ๋ฒˆ์„ ์ฐพ๋Š”๋‹ค

  

1 - 2 ํ•ด์‹œ ์กฐ์ธ์ด ๋น ๋ฅธ ์ด์œ 

Hash Area์— ์ƒ์„ฑํ•œ ํ•ด์‹œํ…Œ์ด๋ธ” (-=ํ•ด์‹œ ๋งต)์„ ์ด์šฉ ํ•œ๋‹ค๋Š” ๊ฒƒ๋งŒ ๋‹ค๋ฅผ ๋ฟ ํ•ด์‹œ ์กฐ์ธ๋„ NL ์กฐ์ธ๊ณผ ๊ฐ™๋‹ค
๊ทธ๋Ÿฐ๋ฐ๋„ ํ•ด์‹œ ์กฐ์ธ์ด NL ์กฐ์ธ๋ณด๋‹ค ๋น ๋ฅธ ์ด์œ ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ PGA (private) ์˜์—ญ์— ํ• ๋‹น ํ•˜๊ธฐ ๋•Œ๋ฌธ.

๐Ÿ”‘ ํ•ด์‹œ ํ…Œ์ด๋ธ”์—๋Š” JOIN ํ‚ค ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ SQL์— ์‚ฌ์šฉํ•œ ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.

 

1 - 3 ํ•ด์‹œ์กฐ์ธ ์‹คํ–‰๊ณ„ํš ์ œ์–ด 

์„ธ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ” ํ•ด์‹œ ์กฐ์ธํ•˜๊ธฐ

A B C  ์„ธ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ์ด 2๊ฐ€์ง€๋‹ค

๊ฒฝ๋กœ1

select * 
from A, B , C
where A.key = B.key
and B.key = C.key

๊ฒฝ๋กœ2

select * 
from A, B,C
where A.key= B.key
and A.key = C.key

 

๊ฒฝ๋กœ2 ๋ฅผ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ๋ฐ”๊ฟ”์„œ ํ‘œํ˜„ํ–ˆ๋‹ค

๊ฒฐ๊ตญ ์„ธ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธ ํ•˜๋Š” ๊ฒฝ๋กœ๋Š”

 

๊ฒฝ๋กœ 1์—์„œ A ,B ,C ๋ฅผ ๊ฐ๊ฐ T1 , T2 , T3์— ๋Œ€์ž…ํ•˜๊ณ 
๊ฒฝ๋กœ 2 ์—์„œ B , A ,C ๋ฅผ ๊ฐ๊ฐ T1 , T2 , T3์— ๋Œ€์ž…ํ–ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์„ธ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ํ•ด์‹œ์กฐ์ธ์„ ์ œ์–ดํ•  ๋•Œ leading ํžŒํŠธ๋ฅผ ์ง€์ •ํ•˜์ž

selec /*+ 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 ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•  ๋•Œ๋Š” T1์ด Build Input ์ด๋‹ค

 

1 - 4 ์กฐ์ธ ๋ฉ”์„œ๋“œ ์„ ํƒ ๊ธฐ์ค€

โ‘  ์†Œ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐ์ธ โ–ท  NL ์กฐ์ธ

โ‘ก ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ์กฐ์ธ โ–ท ํ•ด์‹œ ์กฐ์ธ

โ‘ข ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์กฐ์ธ์ธ๋ฐ ์กฐ๊ฑด์‹์— ๋“ฑ์น˜ (=)๊ฐ€ ์•„๋‹ˆ๋‹ค โ–ท ์†ŒํŠธ ๋จธ์ง€ ์กฐ์ธ

๐Ÿ”‘ ์†Œ๋Ÿ‰๊ณผ ๋Œ€๋Ÿ‰์˜ ๊ธฐ์ค€ ? 

๋ฐ์ดํ„ฐ๋Ÿ‰์˜ ๋งŽ๊ณ  ์ ์Œ์— ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ
NL์กฐ์ธ ๊ธฐ์ค€์œผ๋กœ '์ตœ์ ํ™” ํ–ˆ์Œ์—๋„' ๋žœ๋ค ์•ก์„ธ์Šค๊ฐ€ ๋งŒ์กธํ• ๋งŒํ•œ ์„ฑ๋Š˜์„ ๋‚ผ์ˆ˜ ์—†๋‹ค๋ฉด ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐ์ธ

์ˆ˜ํ–‰ ๋นˆ๋„๊ฐ€ ๋†’์€ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๊ธฐ์ค€

โ‘  (์ตœ์ ํ™”๋œ) NL ์กฐ์ธ๊ณผ ํ•ด์‹œ ์กฐ์ธ ์„ฑ๋Šฅ์ด ๊ฐ™์œผ๋ฉด NL์กฐ์ธ

โ‘ก ํ•ด์‹œ ์กฐ์ธ์ด ์•ฝ๊ฐ„ ๋” ๋นจ๋ผ๋„ NL ์กฐ์ธ

โ‘ข NL ์กฐ์ธ๋ณด๋‹ค ํ•ด์‹œ ์กฐ์ธ์ด ๋น ๋ฅธ ๊ฒฝ์šฐ , ํ•ด์‹œ ์กฐ์ธ

โ‘ข์€ ์•„๋งˆ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐ์ธ์ผ ๊ฒƒ์ด๋‹ค , ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐ์ธํ•  ๋•Œ ํ•ด์‹œ ์กฐ์ธํ•˜๋ผ์™€ ๊ฐ™์€ ์˜๋ฏธ

728x90