CS/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ์กฐ์ธ์˜ ์›๋ฆฌ

1eehyunji 2023. 9. 29. 21:14

https://1eehyunji.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A1%B0%EC%9D%B8Join

 

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ์กฐ์ธ(Join)

์กฐ์ธ(Join)์ด๋ž€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. MySQL์—์„œ๋Š” JOIN์ด๋ผ๋Š” ์ฟผ๋ฆฌ๋กœ, MongoDB์—์„œ๋Š” lookup์ด๋ผ๋Š” ์ฟผ๋ฆฌ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. (

1eehyunji.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์—์„œ ์„ค๋ช…ํ•œ ์กฐ์ธ์€ ์กฐ์ธ์˜ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค. 

์กฐ์ธ์˜ ์›๋ฆฌ์ธ ์ค‘์ฒฉ ๋ฃจํ”„ ์กฐ์ธ, ์ •๋ ฌ ๋ณ‘ํ•ฉ ์กฐ์ธ, ํ•ด์‹œ ์กฐ์ธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

 

์ค‘์ฒฉ ๋ฃจํ”„ ์กฐ์ธ(NLJ, Nested Loop Join)

์ค‘์ฒฉ ๋ฃจํ”„ ์กฐ์ธ์€ ์ค‘์ฒฉ for๋ฌธ๊ณผ ๊ฐ™์€ ์›๋ฆฌ๋กœ ์กฐ๊ฑด์— ๋งž๋Š” ์กฐ์ธ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, ๋žœ๋ค ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋น„์šฉ์ด ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ๋Œ€์šฉ๋Ÿ‰์˜ ํ…Œ์ด๋ธ”์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค

 

์˜ˆ๋ฅผ ๋“ค์–ด, "t1, t2 ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•œ๋‹ค."๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์—์„œ ํ–‰์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ฝ๊ณ  ๊ทธ ๋‹ค์Œ ํ…Œ์ด๋ธ”์—์„œ๋„ ํ–‰์„ ํ•˜๋‚˜์”ฉ ์ฝ์–ด ์กฐ๊ฑด์— ๋งž๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

for each row in t1 matching reference key {
	for each row in t2 matching reference key {
    	if row satisfies join conditions, send to client
    }
}

 

์ •๋ ฌ ๋ณ‘ํ•ฉ ์กฐ์ธ(Sort Merge Join)

์ •๋ ฌ ๋ณ‘ํ•ฉ ์กฐ์ธ์ด๋ž€ ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ํ•„๋“œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ์ •๋ ฌ์ด ๋๋‚œ ์ดํ›„์— ์กฐ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์กฐ์ธ์ด๋‹ค.

์กฐ์ธํ•  ๋•Œ ์“ธ ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ณ , ๋Œ€์šฉ๋Ÿ‰์˜ ํ…Œ์ด๋ธ”๋“ค์„ ์กฐ์ธํ•˜๊ณ , ์กฐ์ธ ์กฐ๊ฑด์— <, > ๋“ฑ ๋ฒ”์œ„ ๋น„๊ต ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์„ ๋•Œ ์“ด๋‹ค. 

 

๋งŒ์•ฝ ๋‘ ํ…Œ์ด๋ธ”์˜ ์ •๋ ฌ ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์ฐจ์ด๊ฐ€ ์ปค์„œ, ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ ํ•œ ํ…Œ์ด๋ธ”์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ •๋ ฌ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

ํ•ด์‹œ ์กฐ์ธ(Hash Join)

ํ•ด์‹œ ์กฐ์ธ์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋˜, ๋™๋“ฑ(=) ์กฐ์ธ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

MySQL์˜ ํ•ด์‹œ ์กฐ์ธ ๋‹จ๊ณ„๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„์™€ ํ”„๋กœ๋ธŒ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค.

 

๋นŒ๋“œ ๋‹จ๊ณ„

๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ์ž…๋ ฅ ํ…Œ์ด๋ธ” ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋นŒ๋“œํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, person๊ณผ country๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋‘˜ ์ค‘ ์šฉ๋Ÿ‰์ด ๋” ์ ์€ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋นŒ๋“œํ•œ๋‹ค.

๋˜, ์กฐ์ธ์— ์‚ฌ์šฉ๋˜๋Š” ํ•„๋“œ๊ฐ€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ‚ค๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, person๊ณผ country ํ…Œ์ด๋ธ” ์ค‘ country ํ…Œ์ด๋ธ”์˜ ์šฉ๋Ÿ‰์ด ๋” ์ ๊ณ , ๋‘ ํ…Œ์ด๋ธ”์˜ ์กฐ์ธ์— ์‚ฌ์šฉ๋˜๋Š” ํ•„๋“œ๊ฐ€ ID์ธ ๊ฒฝ์šฐ, ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด country.ID๊ฐ€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ‚ค๋กœ ์‚ฌ์šฉ๋œ๋‹ค. 

 

ํ”„๋กœ๋ธŒ ๋‹จ๊ณ„

ํ”„๋กœ๋ธŒ ๋‹จ๊ณ„ ๋™์•ˆ ๋ ˆ์ฝ”๋“œ ์ฝ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ฐ ๋ ˆ์ฝ”๋“œ์—์„œ person.ID์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, ํ•ด์‹œ ์กฐ์ธ์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์šฉ๋Ÿ‰์ด ๋” ์ ์€ ์ชฝ์˜ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ (๋นŒ๋“œ ๋‹จ๊ณ„), ์šฉ๋Ÿ‰์ด ๋” ํฐ ์ชฝ์˜ ํ…Œ์ด๋ธ”์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์กฐ์ธ์„ ์ˆ˜ํ–‰(ํ”„๋กœ๋ธŒ ๋‹จ๊ณ„)ํ•œ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด ๊ฐ ํ…Œ์ด๋ธ”์€ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ฝ๊ฒŒ ๋˜์–ด ์ค‘์ฒฉํ•ด์„œ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ฝ๋Š” ์ค‘์ฒฉ ๋ฃจํ”„ ์กฐ์ธ๋ณด๋‹ค ๋ณดํ†ต์€ ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค.