๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SQL/SQL ๋ ˆ๋ฒจ์—…

[SQL ๋ ˆ๋ฒจ์—…] 6์žฅ: ๊ฒฐํ•ฉ

by oliviarla 2022. 4. 25.

๊ธฐ๋Šฅ์  ๊ด€์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฐํ•ฉ์˜ ์ข…๋ฅ˜

๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ: ๊ฒฐํ•ฉ ์กฐ๊ฑด์œผ๋กœ ๋“ฑํ˜ธ(=)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

๋น„๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ: ๊ฒฐํ•ฉ ์กฐ๊ฑด์œผ๋กœ ๋ถ€๋“ฑํ˜ธ(>=, < ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

์ž์—ฐ ๊ฒฐํ•ฉ: ๋‚ด๋ถ€ ๊ฒฐํ•ฉ์ด๋ฉด์„œ ๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ

 

- ์ž์—ฐ ๊ฒฐํ•ฉ ์˜ˆ์‹œ

SELECT * 
FROM Employees NATURAL JOIN Departments;

๋‚ด๋ถ€ ๊ฒฐํ•ฉ+ ๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ ์ฟผ๋ฆฌ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ ๋„์ถœ

SELECT * FROM Employees E INNER JOIN Departments D
ON E.dept_id=D.dept_id;

USING ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

SELECT * FROM Employees INNER JOIN Departments
USING(dept_id);

1. ํฌ๋กœ์Šค ๊ฒฐํ•ฉ

SELECT * FROM Employees
CROSS JOIN Departments;

2๊ฐœ์˜ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ

(์‚ฌ์› ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ) * (๋ถ€์„œ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ) ๋งŒํผ์˜ ๋ ˆ์ฝ”๋“œ ๊ฒฐ๊ณผ ์ƒ์„ฑ

์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ด์œ 

- ์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์—†์Œ

- ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์—ฐ์‚ฐ์ž„

์‹ค์ˆ˜๋กœ ์‚ฌ์šฉํ•œ ํฌ๋กœ์Šค ๊ฒฐํ•ฉ

SELECT * FROM Employees, Departments;

- ๊ฒฐํ•ฉ ์กฐ๊ฑด์„ ์ ์ง€ ์•Š์œผ๋ฉด ํฌ๋กœ์Šค ๊ฒฐํ•ฉ์ด ๋จ

- ํ‘œ์ค€ SQL์— ๋งž๊ฒŒ ๊ฒฐํ•ฉ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

2. ๋‚ด๋ถ€ ๊ฒฐํ•ฉ

SELECT E.emp_id, E.emp_name, E.dept_id, D.dept_name
FROM Employees E INNER JOIN Departments D
     ON E.dept_id=D.dept_id;

๋‚ด๋ถ€ ๊ฒฐํ•ฉ์˜ ๊ฒฐ๊ณผ๋Š” ํฌ๋กœ์Šค ๊ฒฐํ•ฉ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ž„

๋‚ด๋ถ€ ๊ฒฐํ•ฉ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ

SELECT E.emp_id, E.emp_name, E.dept_id,
       (SELECT D.dept_name FROM Departments D
       WHERE E.dept_id=D.dept_id) AS dept_name
FROM Employees E;

- dept_id๋Š” ๋ถ€์„œ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค์ด๋ฏ€๋กœ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์ผ ๊ฒƒ์ž„

- ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ณด๋‹ค๋Š” ๊ฒฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์‹คํ–‰ ๋น„์šฉ์ด ์ ์Œ

3. ์™ธ๋ถ€ ๊ฒฐํ•ฉ

์ข…๋ฅ˜

- ์™ผ์ชฝ ์™ธ๋ถ€ ๊ฒฐํ•ฉ: ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ์™ผ์ชฝ์— ์ ์€ ๊ฒƒ

- ์˜ค๋ฅธ์ชฝ ์™ธ๋ถ€ ๊ฒฐํ•ฉ: ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ์˜ค๋ฅธ์ชฝ์— ์ ์€ ๊ฒƒ

- ์™„์ „ ์™ธ๋ถ€ ๊ฒฐํ•ฉ

 

๋งˆ์Šคํ„ฐ ํ…Œ์ด๋ธ”์ชฝ์—๋งŒ ์กด์žฌํ•˜๋Š” ํ‚ค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ๋กœ ๋ณด์กด

ํ‚ค๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง„ ๋ ˆ์ด์•„์›ƒ์˜ ๋ฆฌํฌํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ

4. ์™ธ๋ถ€ ๊ฒฐํ•ฉ๊ณผ ๋‚ด๋ถ€ ๊ฒฐํ•ฉ์˜ ์ฐจ์ด

์™ธ๋ถ€ ๊ฒฐํ•ฉ ๊ฒฐ๊ณผ๋Š” ๋งˆ์Šคํ„ฐ ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ณด์กดํ•˜๊ณ ์ž NULL๊ฐ’์ด ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ

๋”ฐ๋ผ์„œ ์™ธ๋ถ€ ๊ฒฐํ•ฉ์€ ํฌ๋กœ์Šค ๊ฒฐํ•ฉ์˜ ๊ฒฐ๊ณผ์— ์—†๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ

5. ์ž๊ธฐ ๊ฒฐํ•ฉ

- ์—ฐ์‚ฐ์˜ ๋Œ€์ƒ์œผ๋กœ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ„๋ฅ˜์ž„, ์ƒ์„ฑ๋˜๋Š” ๊ฒฐ๊ณผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฒƒ ์•„๋‹˜

- ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ๋ณ„์นญ์„ ๋ถ™์—ฌ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋‹ค๋ฃธ

- (์ž๊ธฐ ๊ฒฐํ•ฉ) + (ํฌ๋กœ์Šค/์™ธ๋ถ€/๋‚ด๋ถ€ ๊ฒฐํ•ฉ) ์˜ ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

digit
0
1
2
3
4
5
6
7
8
9

 

SELECT D1.digit + (D2.digit * 10) AS seq
FROM Digits D1 CROSS JOIN Digits D2;

0~99๊นŒ์ง€์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋จ

 

๊ฒฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์„ฑ๋Šฅ

Nested Loops

๊ฒฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ณธ

์ค‘์ฒฉ ๋ฐ˜๋ณต์„ ์‚ฌ์šฉ

์‹คํ–‰ ์‹œ๊ฐ„์€ ๋ ˆ์ฝ”๋“œ ์ˆ˜์— ๋น„๋ก€ํ•จ

ํ•œ ๋ฒˆ์˜ ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ ์ ์œผ๋ฏ€๋กœ Hash, Sort Merge์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๊ฐ€ ์ ์Œ

๋ชจ๋“  DBMS์—์„œ ์ง€์›

 

๊ตฌ๋™ ํ…Œ์ด๋ธ”์˜ ์ค‘์š”์„ฑ

๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์˜ ๊ฒฐํ•ฉ ํ‚ค ํ•„๋“œ์— ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์„ ์™„์ „ํžˆ ์ˆœํ™˜ํ•˜์ง€ ์•Š๊ณ  ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Œ

-> ๊ตฌ๋™ ํ…Œ์ด๋ธ”์„ ์ž‘์€ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒํ•˜๋ฉด ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ๊ฒฐํ•ฉ ํ‚ค์˜ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค ์ˆ˜ ์žˆ์Œ

์ด์ƒ์ ์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ

- ๊ตฌ๋™ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ํ•œ ๊ฐœ์— ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ํ•œ ๊ฐœ๊ฐ€ ๋Œ€์‘ํ•˜๋ฉด์„œ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

- ์ ‘๊ทผํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜: R(A) * 2 ๊ฐœ

 

๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์˜ ๋ฐ˜๋ณต์„ ์™„์ „ํ•˜๊ฒŒ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ

๊ฒฐํ•ฉํ‚ค๊ฐ€ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์œ ์ผํ•œ ๊ฒฝ์šฐ

๋“ฑ์น˜ ๊ฒฐํ•ฉ์ด๋ผ๋ฉด ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์˜ ์ ‘๊ทผ ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•œ ๊ฐœ๋กœ ํ•œ์ • ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ด์ค‘ ๋ฐ˜๋ณต์˜ ๋‚ด์ธก์— ์žˆ๋Š” ๋ฐ˜๋ณต์„ ์™„์ „ํ•˜๊ฒŒ ์ƒ๋žต

ex) ์˜ค๋ผํด์˜ INDEX UNIQUE SCAN

 

๋งŒ์•ฝ ๊ฒฐํ•ฉ ํ‚ค๊ฐ€ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์œ ์ผํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋กœ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํžˆํŠธ๋˜์–ด ๋ฐ˜๋ณต์„ ์ ์šฉํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ

 

์š”์•ฝ: (๊ตฌ๋™ ํ…Œ์ด๋ธ”์ด ์ž‘์€ Nested Loops) + (๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์˜ ๊ฒฐํ•ฉ ํ‚ค์— ์ธ๋ฑ์Šค) ์กฐํ•ฉ์œผ๋กœ ๊ฒฐํ•ฉ์ด ๋А๋ฆด ๋•Œ ๊ฐœ์„  ๊ฐ€๋Šฅ

 

Nested Loops์˜ ๋‹จ์ 

์˜ˆ์‹œ: ํ•œ ๊ฐœ์˜ ์ ํฌ ๋‹น ๋ฐ›๋Š” ์ฃผ๋ฌธ์ด ๋งŽ๋Š” ๊ฒฝ์šฐ

์ ํฌ ํ…Œ์ด๋ธ”์„ ๊ตฌ๋™ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค๊ณ  ์ ํฌ ID๋ฅผ ๊ฒฐํ•ฉ ํ‚ค๋กœ ์‚ฌ์šฉ -> ์ˆ˜๋ฐฑ๋งŒ~์ˆ˜์ฒœ๋งŒ ๊ฑด์˜ ์ฃผ๋ฌธ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํžˆํŠธ๋œ๋‹ค๋ฉด ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ๋งŽ์•„์ ธ ์„ฑ๋Šฅ ์ €ํ•˜

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•: 1) ๊ตฌ๋™ ํ…Œ์ด๋ธ”๋กœ ํฐ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•ด ํ•ญ์ƒ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋กœ ์ ‘๊ทผํ•จ์„ ๋ณด์žฅ

               2) ํ•ด์‹œ ์‚ฌ์šฉ

Hash

- ์ž‘์€ ํ…Œ์ด๋ธ”์„ ์Šค์บ”ํ•˜๊ณ  ๊ฒฐํ•ฉ ํ‚ค์— ํ•ด์‹œ ํ•จ์ˆ˜ ์ ์šฉํ•ด ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์Šค์บ”ํ•ด ๊ฒฐํ•ฉ ํ‚ค๊ฐ€ ํ•ด์‹œ๊ฐ’์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ ๊ฒฐํ•ฉ ์ˆ˜ํ–‰

- ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ DBMS์˜ ์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ ์ž‘์€ ํ…Œ์ด๋ธ”์—์„œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ฆ

- Nested Loops์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒŒ ์†Œ๋ชจ

- ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ง€์—ฐ ๋ฐœ์ƒ

- ์ถœ๋ ฅ๋˜๋Š” ํ•ด์‹œ๊ฐ’์€ ์ž…๋ ฅ๊ฐ’์˜ ์ˆœ์„œ๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋“ฑ์น˜ ๊ฒฐํ•ฉ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Hash๊ฐ€ ์œ ์šฉํ•œ ๊ฒฝ์šฐ

- Nested Loops์—์„œ ์ ์ ˆํ•œ ๊ตฌ๋™ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

- Nested Loops์—์„œ ๊ตฌ๋™ ํ…Œ์ด๋ธ”๋กœ ์‚ฌ์šฉํ• ๋งŒํ•œ ์ž‘์€ ํ…Œ์ด๋ธ”์€ ์žˆ์ง€๋งŒ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์—์„œ ํžˆํŠธ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ

- Nested Loops์—์„œ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

Hash์˜ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„

๋™์‹œ ์‹คํ–‰์„ฑ์ด ๋†’์€ OLTP ์ฒ˜๋ฆฌ(์‚ฌ์šฉ์ž ์š”๊ตฌ์— ์‹œ์Šคํ…œ์ด ๋ฐ”๋กœ ์‘๋‹ตํ•ด์•ผ ํ•˜๋Š” ์ฒ˜๋ฆฌ)ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ง€์—ฐ ๋ฐœ์ƒ ๋ฆฌ์Šคํฌ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ํ…Œ์ด๋ธ” ๊ทœ๋ชจ๊ฐ€ ํฌ๋‹ค๋ฉด ์ ‘๊ทผ ์‹œ๊ฐ„ ๊ณ ๋ คํ•ด์•ผ ํ•จ

Sort Merge

- ๊ฒฐํ•ฉ ๋Œ€์ƒ ํ…Œ์ด๋ธ”๋“ค์„ ๊ฐ๊ฐ ๊ฒฐํ•ฉ ํ‚ค๋กœ ์ •๋ ฌํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ๊ฒฐํ•ฉ ํ‚ค๋ฅผ ์ฐพ์œผ๋ฉด ๊ฒฐํ•ฉ

- ๋Œ€์ƒ ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ์ •๋ ฌํ•˜๋ฏ€๋กœ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„(Hash๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ: Hash๋Š” ํ•œ์ชฝ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด์„œ๋งŒ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ฆ)

- ๋“ฑ์น˜, ๋ถ€๋“ฑํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฐํ•ฉ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ๋ถ€์ • ์กฐ๊ฑด ๊ฒฐํ•ฉ์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

- ํ…Œ์ด๋ธ”์ด ๊ฒฐํ•ฉ ํ‚ค๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ •๋ ฌ ์ƒ๋žต ๊ฐ€๋Šฅ

- ํ…Œ์ด๋ธ”์„ ์ •๋ ฌํ•˜๋ฏ€๋กœ ํ•œ์ชฝ ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ์Šค์บ”ํ•œ ์‹œ์ ์— ๊ฒฐํ•ฉ ์™„๋ฃŒ๋จ

์˜๋„ํ•˜์ง€ ์•Š์€ ํฌ๋กœ์Šค ๊ฒฐํ•ฉ

- ์‚ผ๊ฐ ๊ฒฐํ•ฉ

SELECT A.col_a, B.col_b, C.col_c
FROM Table_A A
    INNER JOIN Table_B B
        ON A.col_a=B.col_b
    INNER JOIN Table_C C
        ON A.col_a=C.col_c;

ํ…Œ์ด๋ธ” B์™€ ํ…Œ์ด๋ธ” C์˜ ๊ฒฐํ•ฉ ์กฐ๊ฑด์ด ์—†์Œ

์‹คํ–‰ ๊ณ„ํš์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ” B์™€ C๋ฅผ ํฌ๋กœ์Šค ๊ฒฐํ•ฉ ํ•œ ํ›„ ํ…Œ์ด๋ธ” A์™€ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Œ

- ์˜๋„ํ•˜์ง€ ์•Š์€ ํฌ๋กœ์Šค ๊ฒฐํ•ฉ ํšŒํ”ผํ•˜๊ธฐ

๊ฒฐํ•ฉ ์กฐ๊ฑด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ” ์‚ฌ์ด์—์„œ ๊ฒฐ๊ณผ์— ์•„๋ฌด ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ถˆํ•„์š”ํ•œ ๊ฒฐํ•ฉ ์กฐ๊ฑด์„ ์ถ”๊ฐ€

๊ฒฐํ•ฉ์ด ๋А๋ฆด ๋•Œ

1. ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์ตœ์ ์˜ ๊ฒฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

<ํ‘œ6-1>

๊ฒฐํ•ฉ ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ ์ˆ˜์— ๋”ฐ๋ฅธ ์ตœ์ ์˜ ๊ฒฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

- ์†Œ๊ทœ๋ชจ & ์†Œ๊ทœ๋ชจ: ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด๋„ ์„ฑ๋Šฅ ์ฐจ๊ฐ€ ํฌ์ง€ ์•Š์Œ

- ์†Œ๊ทœ๋ชจ & ๋Œ€๊ทœ๋ชจ: ์†Œ๊ทœ๋ชจ ํ…Œ์ด๋ธ”์„ ๊ตฌ๋™ ํ…Œ์ด๋ธ”๋กœ ํ•˜๋Š” Nested Loops ์‚ฌ์šฉ, ๋Œ€๊ทœ๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ฒฐํ•ฉ ํ‚ค์— ์ธ๋ฑ์Šค ์ƒ์„ฑ

                             ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์˜ ๊ฒฐํ•ฉ ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค๋ฉด ๊ตฌ๋™ ํ…Œ์ด๋ธ”๊ณผ ๋‚ด๋ถ€ํ…Œ์ด๋ธ” swap ํ˜น์€ Hash ์‚ฌ์šฉ

- ๋Œ€๊ทœ๋ชจ & ๋Œ€๊ทœ๋ชจ: ์ผ๋‹จ Hash ์‚ฌ์šฉ, ๊ฒฐํ•ฉ ํ‚ค๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด Sort Merge ์‚ฌ์šฉ

2. ์‹คํ–‰ ๊ณ„ํš ์ œ์–ด

DBMS์— ๋”ฐ๋ผ ํžŒํŠธ ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ์‹คํ–‰ ๊ณ„ํš์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฆ„

์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์™„๋ฒฝํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•„์ง๊นŒ์ง€๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณ€๊ฒฝํ•˜๊ณค ํ•จ

ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์–‘๊ณผ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๊ณ„์† ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ์‹คํ–‰ ๊ณ„ํš์ด ์‹œ์ ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ -> DBMS์—์„œ๋Š” ๋น„์šฉ ๊ธฐ๋ฐ˜์— ๋”ฐ๋ฅธ ๋™์  ์‹คํ–‰ ๊ณ„ํš ๋„์ž…

3. ํ”๋“ค๋ฆฌ๋Š” ์‹คํ–‰ ๊ณ„ํš

์˜ตํ‹ฐ๋งˆ์ด์ €์˜ ์‹คํŒจ: ์žฅ๊ธฐ์  ์šด์šฉ ์ค‘ ์‹คํ–‰ ๊ณ„ํš์ด ์•ˆ์ข‹์€ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ€ํ™”ํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ†ต๊ณ„ ์ •๋ณด๊ฐ€ ๋ณ€ํ–ˆ์„ ๋•Œ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณ€ํ™”์‹œํ‚ค๋Š”๋ฐ ์‚ฌ์ „์— ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋Œ๋ฐœ์ ์ธ ์Šฌ๋กœ๋‹ค์šด์„ ์ผ์œผํ‚ด

 

SQL ์„ฑ๋Šฅ์˜ ๋ณ€๋™ ์œ„ํ—˜์„ ์ค„์ด๋ ค๋ฉด ๊ฒฐํ•ฉ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค!

๋Œ“๊ธ€