Nested loop join, Hash join

Nested loop join, Hash join

Join

Join ์ด๋ž€?

Join์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•จ์œผ๋กœ์จ ๋” ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Join ์„ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜?

Join์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€๋งŒ, ๋Œ€๋žต์ ์œผ๋กœ ํฐ ๊ฐ€์ง€๋ฅผ ๋ป—์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ: ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ข…ํ•ฉ์ ์ธ ์ •๋ณด๋ฅผ ์–ป๊ณ ์ž ํ•  ๋•Œ.

  • ๋ฐ์ดํ„ฐ ๋ถ„์„: ์„œ๋กœ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ถ„์„ํ•  ๋•Œ.

  • ๋ฆฌํฌํŠธ ์ƒ์„ฑ: ๋‹ค์–‘ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์…‹์„ ์ƒ์„ฑํ•  ๋•Œ.

  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๊ทœํ™”๋œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ๋•Œ.

Join ์˜ ์ข…๋ฅ˜

Join ์˜ ์ข…๋ฅ˜์ค‘, ์•„๋ž˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ™์ง€ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฒ ๋‹ค.

์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์— ๋งŽ์œผ๋‹ˆ ์ƒ๋žต.

  • Inner Join: ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฒฐํ•ฉ. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธ.

  • Outer Join: ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋„ ํฌํ•จ. Outer Join์€ ๋‹ค์‹œ Left Outer Join, Right Outer Join, Full Outer Join์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

    • Left Outer Join: ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ.

    • Right Outer Join: ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ.

    • Full Outer Join: ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ.

  • Cross Join: ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์ƒ์„ฑ.

  • Self Join: ๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹.

Nested Loop Join

Nested Loop Join ์ด๋ž€?

Nested Loop Join์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์Œ์„ ๋น„๊ตํ•˜์—ฌ ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ์™ธ๋ถ€ ๋ฃจํ”„๋กœ, ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ๋‚ด๋ถ€ ๋ฃจํ”„๋กœ ์„ค์ •ํ•˜๊ณ , ์™ธ๋ถ€ ๋ฃจํ”„์˜ ๊ฐ ํ–‰์— ๋Œ€ํ•ด ๋‚ด๋ถ€ ๋ฃจํ”„์˜ ๋ชจ๋“  ํ–‰์„ ๋น„๊ตํ•œ๋‹ค.

์•„๋ž˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์„ Nested Loop Join ์œผ๋กœ Join ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด ์ฟผ๋ฆฌ๋Š” TableA์™€ TableB์˜ ๋ชจ๋“  ํ–‰์„ ๋น„๊ตํ•˜์—ฌ key ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š” ํ–‰์„ ์กฐ์ธํ•œ๋‹ค.

๋งŒ์•ฝ TableA์™€ TableB์˜ ํ–‰์ด ๊ฐ๊ฐ 1000๊ฐœ์”ฉ์ด๋ผ๋ฉด, ์ด ์ฟผ๋ฆฌ๋Š” ์ตœ๋Œ€ 100๋งŒ ๋ฒˆ์˜ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์–ธ๋œป๋ด๋„ ๋น„ํšจ์œจ์ ์ด๋‹ค.

  • ํŠน์ง•:

    • ๊ฐ„๋‹จํ•˜๊ณ  ๊ตฌํ˜„์ด ์šฉ์ด.

    • ์ž‘์€ ๋ฐ์ดํ„ฐ์…‹์— ์ ํ•ฉ.

    • ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜.

  • ์œ ์˜์‚ฌํ•ญ:

    • ํฐ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์กฐ์ธ์—์„œ๋Š” ๋น„ํšจ์œจ์ .

    • ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋‹ค.

    • ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์ด๋‚˜ ์ธ๋ฑ์Šค๊ฐ€ ์ž˜ ์„ค๊ณ„๋œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ.

Hash Join

Hash Join ์ด๋ž€?

Hash Join์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹.

ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”๊ณผ ๋น„๊ตํ•˜์—ฌ ์กฐ์ธํ•œ๋‹ค.

  • ํŠน์ง•:

    • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์— ์ ํ•ฉ.

    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜.

    • ๋นŒ๋“œ ๋‹จ๊ณ„์™€ ํ”„๋กœ๋ธŒ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

  • ์œ ์˜์‚ฌํ•ญ:

    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

    • ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์„ ํƒ์ด ์ค‘์š”ํ•˜๋‹ค.

    • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋  ์ˆ˜ ์—†์„ ๋•Œ๋Š” ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ •

๋‹ค์Œ์€ ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ๊ฐ€์ง„ ์ฟผ๋ฆฌ ์˜ˆ์‹œ์ด๋‹ค.

์ด ์ฟผ๋ฆฌ๋Š” Nested Loop Join์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

์ด ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณด๋ฉด ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

  1. Nested Loop ์กฐ์ธ:

    • Nested Loop ์กฐ์ธ์€ ๊ฐ ํ–‰์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์Šค์บ”.

    • ์ด ๊ฒฝ์šฐ, order_items์™€ orders ๊ฐ„์˜ ์กฐ์ธ์ด ๋งค์šฐ ๋งŽ์€ ๋ฐ˜๋ณต์„ ๋ฐœ์ƒ์‹œ์ผœ ์„ฑ๋Šฅ์ด ์ €ํ•˜.

    • ํŠนํžˆ, orders ํ…Œ์ด๋ธ”์—์„œ order_date ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๋ฐ˜๋ณต ์ž‘์—…์ด ํ•„์š”.

  2. ๋ฐ์ดํ„ฐ ์–‘:

    • products ํ…Œ์ด๋ธ”์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์ด ๋‹ค์ˆ˜์ผ ๊ฒฝ์šฐ, ๊ฐ ํ–‰์— ๋Œ€ํ•ด order_items์™€ ์กฐ์ธํ•œ ํ›„, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜๋งŽ์€ orders ํ…Œ์ด๋ธ” ์ ‘๊ทผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, products ํ…Œ์ด๋ธ”์—์„œ 200๊ฐœ์˜ ํ–‰์ด ํ•„ํ„ฐ๋ง๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๊ฐ ํ–‰์— ๋Œ€ํ•ด order_items์™€ ์กฐ์ธํ•˜๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜์‹ญ๋งŒ ๋ฒˆ์˜ orders ํ…Œ์ด๋ธ” ์ ‘๊ทผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. Index Only Scan:

    • orders ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ Index Only Scan์ด ๋ฐ˜๋ณต๋˜๋ฉด์„œ ๋งŽ์€ I/O ์ž‘์—…์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์œ„ ์ฟผ๋ฆฌ๋Š” Nested Loop Join์„ ํ†ตํ•ด ๋งŽ์€ ๋ฐ์ดํ„ฐ ํ–‰์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์Šค์บ”.

    • ๊ฐ€์žฅ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ์ˆ˜์‹ญ๋งŒ ๋ฒˆ์˜ orders ํ…Œ์ด๋ธ” ์ ‘๊ทผ.

์ตœ์ ํ™” ๋ฐฉ์•ˆ

Nested Loop Join์„ ํ”ผํ•˜๊ณ , Hash Join์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•ด๋ณด์ž. ๋˜ํ•œ, WITH ์ ˆ์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•ด๋ณด์ž.

  1. Hash Join์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ฟผ๋ฆฌ ์ž‘์„ฑ:

Hash Join์„ ์œ ๋„ํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ WITH ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € ๊ณ„์‚ฐํ•ด๋ณด์ž.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, products์™€ orders ํ…Œ์ด๋ธ”์—์„œ ๋จผ์ € ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋กœ์จ, ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•˜์—ฌ ์กฐ์ธ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

์ตœ์ ํ™” ๊ฒฐ๊ณผ ๋ถ„์„

  • WITH ์ ˆ ์‚ฌ์šฉ: ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์กฐ์ธ์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๋ณด์ž. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํ…Œ์ด๋ธ”์—์„œ ๋จผ์ € ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•œ ํ›„ ์กฐ์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Hash Join ์œ ๋„: ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, DBMS๋Š” ๋” ํฐ ์กฐ์ธ ๊ฒฐ๊ณผ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Hash Join์„ ์„ ํƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ: ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•จ์œผ๋กœ์จ, ์ „์ฒด ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ ํšจ๊ณผ์ ์ด๋‹ค.

์œ„์˜ ์ตœ์ ํ™”๋œ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Š” ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ ์ค‘์š”ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค.

Last updated