JOIN - ๋ฉด์ ‘ ๋Œ€๋น„

2024. 1. 2. 16:27ใ†๋ฉด์ ‘ ์ค€๋น„/๋ฉด์ ‘ ์Šคํ„ฐ๋””

2024.01.03 ์ผ์ž๋กœ ์ง„ํ–‰ ์˜ˆ์ •์ธ ๋ฉด์ ‘ ์Šคํ„ฐ๋”” ์ค€๋น„์˜ ์ผํ™˜์œผ๋กœ, ๋ฐฐ์ •๋œ ํŒŒํŠธ์ธ JOIN์— ๋Œ€ํ•ด ์ •๋ฆฌ ํ›„์— ์ด๋ฅผ ํ† ๋Œ€๋กœ ๋„์ถœํ•ด๋ณผ๋งŒํ•œ ์งˆ๋ฌธ๋“ค์„ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์กฐ์ธ์ด๋ž€?

์กฐ์ธ์ด๋ž€ RDB์—์„œ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๊ฑธ์ณ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ํ•จ๊ป˜ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

์กฐ์ธ ์‹œ ๋จผ์ € ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ํ•˜๊ณ , ๋“œ๋ผ์ด๋น™์˜ ํŠน์ • ์นผ๋Ÿผ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๋’ค์— ์กฐํšŒ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ํ•œ๋‹ค.

์กฐ์ธ์˜ ์ข…๋ฅ˜์—๋Š” INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN ๋“ฑ์ด ์žˆ๋‹ค.

 

์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” NL ์กฐ์ธ(Nested Loop), ์†ŒํŠธ ๋จธ์ง€ ์กฐ์ธ(Sort merge), ํ•ด์‹œ ์กฐ์ธ(Hash) ๋“ฑ์ด ์žˆ๋‹ค.

NL ์กฐ์ธ

NL ์กฐ์ธ์ด๋ž€ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”(์•„์šฐํ„ฐ ํ…Œ์ด๋ธ”)๊ณผ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”(์ด๋„ˆ ํ…Œ์ด๋ธ”)์˜ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์˜ ํ˜•ํƒœ๋กœ ์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์—์„œ ์ฟผ๋ฆฌ์˜ ํƒ€๊ฒŸ์ด ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์€ ํ›„ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์˜ ์กฐ์ธ ๊ธฐ์ค€ ์นผ๋Ÿผ ๊ฐ’์„ ํ†ตํ•ด ๊ณง๋ฐ”๋กœ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ์ด ๋•Œ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๊ณผ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ชจ๋‘ ์ธ๋ฑ์Šค์˜ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, NL ์กฐ์ธ ํŠน์„ฑ ์ƒ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ” ์ชฝ ์กฐ์ธ ์นผ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ํƒ€๊ฒŸ ๋ ˆ์ฝ”๋“œ ํ•œ๊ฑด๋‹น ํ…Œ์ด๋ธ” ํ’€์Šค์บ”์ด ๋งค๋ฒˆ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋ชน์‹œ ์ €ํ•˜๋œ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  NL ์กฐ์ธ์€ OLTP ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‰๊ฐ€ ๋ฐ›๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” OLTP ํ™˜๊ฒฝ์˜ ํŠน์„ฑ ์ƒ ์†Œ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ์ฃผ๋ฅผ ์ด๋ฃจ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋ถ€๋ถ„ ๋ฒ”์œ„ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

Sort merge ์กฐ์ธ

๋จธ์ง€ ์กฐ์ธ์€ ๋‘ ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ์กฐ์ธ ๊ธฐ์ค€ ์นผ๋Ÿผ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ (ํ˜น์€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ) ๋‘ ์ •๋ ฌ๋œ ํ…Œ์ด๋ธ”๋“ค์„ ์ฝ์–ด๊ฐ€๋ฉด์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ์กฐ์ธ์„ ์˜๋ฏธํ•œ๋‹ค. 

๊ฒฐ๊ตญ ๋‘ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์ธ ์นผ๋Ÿผ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜์—ฌ ๋”ฐ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ๋‹ค๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์–‘ ์ชฝ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ๋ชจ๋‘ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

Hash ์กฐ์ธ

ํ•ด์‹œ ์กฐ์ธ์€ ๋‘ ํ…Œ์ด๋ธ” ์ค‘ ํ•œ ์ชฝ ํ…Œ์ด๋ธ”(๋ณดํ†ต ๋” ์ž‘์€ ํ…Œ์ด๋ธ”์„ ์ด์šฉ)์„ ์ด์šฉํ•˜์—ฌ ํ‚ค ๊ฐ’์„ ์กฐ์ธ ์นผ๋Ÿผ ๊ฐ’์œผ๋กœ, ๋ฐธ๋ฅ˜ ๊ฐ’์„ ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๋‚˜๋จธ์ง€ ์นผ๋Ÿผ ๊ฐ’์œผ๋กœ ํ•˜๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ , ์ดํ›„ ๋‚˜๋จธ์ง€ ํ…Œ์ด๋ธ”์„ ์ฝ์œผ๋ฉฐ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธ์„ ์˜๋ฏธํ•œ๋‹ค. 

์กฐ์ธ์„ ์œ„ํ•œ ์‚ฌ์ „ ์ž‘์—…์ด ์กด์žฌํ•˜๋‚˜ ์ž‘์€ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ O(1)๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ JOIN ์‹œ NL ์กฐ์ธ๋ณด๋‹ค ์„ฑ๋Šฅ ์ƒ ์šฐ์œ„์— ์žˆ๊ณ , ๋˜ ์‚ฌ์ „ ์ž‘์—…์— ์–‘์ชฝ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ •๋ ฌ์ด ์š”๊ตฌ๋˜๋Š” ๋จธ์ง€ ์กฐ์ธ๋ณด๋‹ค๋„ ๋” ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ NL ์กฐ์ธ๊ณผ Sort merge ์กฐ์ธ์˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•œ ์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์— ์ฃผ๋กœ ํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

1. ์กฐ์ธ์ด ๋ฌด์—‡์ธ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ , ์™œ ์กฐ์ธ์ด ํ•„์š”ํ•œ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

2. ์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜์—๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”.

2-1. ์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ OLTP ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์กฐ์ธ ๋ฐฉ์‹๊ณผ ์™œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ OLTP์˜ ํŠน์„ฑ์— ์—ฐ๊ด€์ง€์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

3. ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๊ณผ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•  ๋•Œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์ด ์ž‘์€ ํ…Œ์ด๋ธ”์€ ๋‘˜ ์ค‘ ์–ด๋–ค ํ…Œ์ด๋ธ”๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ์ด์•ผ๊ธฐ ํ•ด์ฃผ์„ธ์š”.

3-1. ๋งŒ์•ฝ ์ž‘์€ ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ํ™•์ธํ•ด์•ผํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ n๊ฐœ์ด๊ณ , ํฐ ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ํ™•์ธํ•ด์•ผํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ m๊ฐœ๋ผ๋ฉด ๊ฒฐ๊ตญ ํ™•์ธํ•˜๋Š” ํšŸ์ˆ˜๋Š” n x m์ด ๋  ๊ฒƒ ๊ฐ™์€๋ฐ ์ž‘์€ ์ชฝ ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์–ด์งธ์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

4. ํ…Œ์ด๋ธ” ๊ฐ„ ์กฐ์ธ์„ ํ†ตํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค๊ณ  ๊ด€์Šต์ ์œผ๋กœ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์„œ์ˆ ์ด ํƒ€๋‹นํ•œ์ง€ ๋‹ต๋ณ€ํ•˜๊ณ , ๊ทธ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ทผ๊ฑฐ๋ฅผ ๋“ค์–ด์ฃผ์„ธ์š”.