๐ 1์ฅ์ ๋ชฉํ: RDB์ ๋ด๋ถ์ ์ธ ๋์ ๋ชจ๋ธ ์ดํด
DBMS ์ํคํ ์ฒ ๊ฐ์
1. DBMS์ ์ผ๋ฐ์ ์ธ ์ํคํ ์ฒ ๊ฐ์

DBMS๋ฅผ ํตํด SQL ๊ตฌ๋ฌธ์ด ์คํ๋์ด ๋ฐ์ดํฐ๋ฅผ '๋ค์ํ๊ฒ ์ฒ๋ฆฌ' ๊ฐ๋ฅ
2. DBMS ๋ด๋ถ ๊ธฐ๋ฅ
์ฟผ๋ฆฌ ํ๊ฐ ์์ง
์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ SQL ๊ตฌ๋ฌธ ๋ถ์, ์ด๋ค ์์๋ก ๊ธฐ์ต์ฅ์น์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ง ์คํ ๊ณํ์ ๊ฒฐ์ -> DBMS์ ํต์ฌ ๊ธฐ๋ฅ ๋ด๋น
์ ๊ทผ ๋ฉ์๋(access method): ์คํ ๊ณํ์ ๊ธฐ๋ฐ์ ๋์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
์ฟผ๋ฆฌ(query): ์ข์ ์๋ฏธ๋ก๋ SELECT ๊ตฌ๋ฌธ์, ๋์ ์๋ฏธ๋ก๋ SQL ๊ตฌ๋ฌธ ์ ์ฒด๋ฅผ ๋ํ๋
๋ฒํผ ๋งค๋์
ํน๋ณํ ์ฉ๋๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ ๋ฒํผ๋ฅผ ๊ด๋ฆฌ
๋์คํฌ ์ฉ๋ ๋งค๋์
๋ฐ์ดํฐ์ ์ ์ฅ ์์น์ ๋ฐฉ๋ฒ์ ๊ด๋ฆฌ, ์ฝ๊ณ ์ฐ๊ธฐ๋ฅผ ์ ์ด
ํธ๋์ญ์ ๋งค๋์ ์ ๋ฝ ๋งค๋์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ฐ๊ฐ์ ์ฒ๋ฆฌ๋ DBMS ๋ด๋ถ์์ ํธ๋์ญ์ ์ด๋ผ๋ ๋จ์๋ก ๊ด๋ฆฌ๋จ
ํธ๋์ญ์ ์ ์ ํฉ์ฑ์ ์ ์งํ๋ฉด์ ์คํ์ํด, ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ๋ฝ์ ๊ฑธ์ด ๋ค๋ฅธ ์์ฒญ์ ๋๊ธฐ์ํด
๋ฆฌ์ปค๋ฒ๋ฆฌ ๋งค๋์
์์คํ ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋๋นํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋ฐฑ์ , ๋ฌธ์ ๋ฐ์ ์ ๋ณต๊ตฌํ๋ ์ญํ ์ํ
๐กํ๋์ SQL ๊ตฌ๋ฌธ์ ๋ ๋ฆฝ์ ์ ์คํํ ๋์ ์ฑ๋ฅ์ ๋ํด ์ค์ ์ ๋
๐ก์ฑ๋ฅ๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ ๊ฐ์ง๋ ๊ธฐ๋ฅ
โ๏ธ ์ฟผ๋ฆฌ ํ๊ฐ ์์ง(+ ์คํ ๊ณํ)
โ๏ธ ๋ฒํผ ๋งค๋์
DBMS์ ๋ฒํผ
1. ํธ๋ ์ด๋ ์คํ
๊ธฐ์ต ๋น์ฉ: ๋ฐ์ดํฐ ์ ์ฅ์ ์๋ชจ๋๋ ๋น์ฉ
| ์ข ๋ฅ | ์ ๊ทผ ์๋ | ๊ธฐ์ต ๋น์ฉ | |
| 1์ฐจ ๊ธฐ์ต ์ฅ์น | ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ | ๋น ๋ฆ | ๋์ |
| 2์ฐจ ๊ธฐ์ต ์ฅ์น | HDD, CD, DVD, ํ๋์ ๋ฉ๋ชจ๋ฆฌ | ๋ณดํต | ๋ณดํต |
| 3์ฐจ ๊ธฐ์ต ์ฅ์น | ํ ์ดํ | ๋๋ฆผ | ๋ฎ์ |
๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ์ ์ฅํ๋ ค๋ฉด ์๋๋ฅผ ์๊ณ , ์๋๋ฅผ ์ป๊ณ ์ ํ๋ฉด ์์์ฑ์ ์์ -> trade off
2. DBMS ์ ๊ธฐ์ต์ฅ์น์ ๊ด๊ณ
ํ๋๋์คํฌ
DBMS๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋งค์ฒด์ ๋๋ถ๋ถ์ด ํ๋๋์คํฌ์
์ด๋ค ์ํฉ์์๋ ํ๊ท ์ ์ธ ์์น๋ฅผ ๊ฐ์ง๋ ๋งค์ฒด
๋ฉ๋ชจ๋ฆฌ
๊ท๋ชจ์๋ ์์ฉ ์์คํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ
์ ์ฅ ๊ณต๊ฐ์ด ์๋ฌด๋ฆฌ ๋ง์๋ 100GB๋ฅผ ๋๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์
๋ฒํผ๋ฅผ ํ์ฉํ ์๋ ํฅ์
์ฑ๋ฅ ํฅ์์ ์ํด ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ or ์บ์ (๋งค์ฒด: ๋ฉ๋ชจ๋ฆฌ)์ ์ฌ๋ฆผ
์์ฃผ ์ ๊ทผํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๋ฉด ๋น ๋ฅธ ์๋๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
-> ๋ฒํผ ๋งค๋์ ๋ ๊ณ ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋ฒํผ์ '๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ, ์ด๋ ์ ๋์ ๊ธฐ๊ฐ๋์ ์ฌ๋ฆด์ง' ๊ด๋ฆฌํ์ฌ ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ์ค
3. ๋ฉ๋ชจ๋ฆฌ์ ๋ฒํผ
๋ฐ์ดํฐ ์บ์
๋์คํฌ์ ์๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
SQL๋ฌธ์์ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ ์บ์์ ์๋ค๋ฉด ๋น ๋ฅธ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋ก๊ทธ ๋ฒํผ
๊ฐฑ์ ๊ณผ ๊ด๋ จ๋ SQL๊ตฌ๋ฌธ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ, ๋ก๊ทธ ๋ฒํผ ์์ ๋ณ๊ฒฝ ์ ๋ณด๋ฅผ ๋ณด๋ธ ํ ๋์คํฌ์ ๋ณ๊ฒฝ์ ์ํ
๊ฐฑ์ ์ฒ๋ฆฌ๋ SQL ๊ตฌ๋ฌธ์ ์คํ ์์ ๊ณผ ์ ์ฅ์์ ๊ฐฑ์ ํ๋ ์์ ์ ์ฐจ์ด๊ฐ ์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ
๐๐ปโ๏ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ด์ ? ๊ฐฑ์ ์ ์๋ชจ๋๋ ์๊ฐ๋์ ์ฌ์ฉ์๊ฐ ๋๊ธฐํ์ง ์๋๋ก ํ๊ธฐ ์ํจ
4. ๋ฉ๋ชจ๋ฆฌ์ ์ฑ์ง์ ์ํ ํธ๋ ์ด๋ ์คํ
ํ๋ฐ์ฑ
DBMS๋ฅผ ๊ป๋ค ์ผ๋ฉด ๋ฒํผ ์์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง -> ๋ฉ๋ชจ๋ฆฌ์ ์์์ฑ ๊ธฐ๋ฅ์ด ์๋ ์ด์ ๋์คํฌ๋ฅผ ๋์ฒดํ ์ ์์
์ฅ์ ๋ฐ์ ์ ๋ก๊ทธ ๋ฒํผ ์์ ์ฌ์ฉ์์ ๊ฐฑ์ ์ ๋ณด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ฉด ํฐ ๋ฌธ์ ๋ฐ์
-> ์ปค๋ฐ(commit)์ ์ฌ์ฉ
- ๊ฐฑ์ ์ ๋ณด๋ฅผ ๋ฐ๋์ ์์์ ์ธ ์ ์ฅ์์ ์๋ ๋ก๊ทธ ํ์ผ์ ์จ ๊ฐฑ์ ์ฒ๋ฆฌ๋ฅผ ํ์
- (+) ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์ ํฉ์ฑ ์ ์ง ๊ฐ๋ฅ
- (-) ๋์คํฌ์ ๋๊ธฐ ์ ๊ทผ์ด ์ผ์ด๋ ์ฑ๋ฅ์ด ๋ฎ์์ง
5. ์์คํ ํน์ฑ์ ์ํ ํธ๋ ์ด๋ ์คํ
๋ฐ์ดํฐ ์บ์์ ๋ก๊ทธ ๋ฒํผ์ ํฌ๊ธฐ
DBMS์ ๋ฒํผ๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ด ํ ๋น๋จ: (๋ฐ์ดํฐ ์บ์ ์ด๊น๊ฐ) > (๋ก๊ทธ ๋ฒํผ์ ์ด๊น๊ฐ)
์ด์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ ๊ธฐ๋ฅ์ ๋ฉ์ธ์ผ๋ก ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ
- ๊ฒ์ ์ฒ๋ฆฌ ์ ๋ ์ฝ๋๊ฐ ์๋ฐฑ๋ง~์์ฒ๋ง ๊ฑด์ ๋ฌํ๋ ๊ฒฝ์ฐ ๋ง์
- ๊ฐฑ์ ์ฒ๋ฆฌ ์ ๊ฐฑ์ ๋์ ๋ ์ฝ๋๊ฐ ๋ง์๋ด์ผ ํธ๋์ญ์ ๋ง๋ค ํ ๊ฑด~ ์๋ง ๊ฑด์ ๋ฌํจ
๊ฒฐ๋ก ์ ์ผ๋ก, ์์ฃผ ๊ฒ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ฌ๋ ค๋๋ ๊ฒ์ด ํจ์จ์ +) ๋ง์ฝ ์์คํ ์ด ๊ฒ์์ ๋นํด ๊ฐฑ์ ์ด ๋ง๋ค๋ฉด ํ๋ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
๊ฒ์๊ณผ ๊ฐฑ์ ์ค ์ค์ํ ๊ฒ
๊ฒ์, ๊ฐฑ์ ์ค ์ด๋ค ๊ฒ์ ์ฐ์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ ๊ฒ์ธ์ง ํ๋จํด์ผ ํจ
์ค๊ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
- ๋ก๊ทธ ๋ฒํผ ๋น์ค์ด ํฌ๋ค -> ๊ฐฑ์ ์ฒ๋ฆฌ์ ๊ด๋ จํด ํฐ ๋ถํ๊ฐ ๊ฑธ๋ฆด ๊ฒ์ ๊ณ ๋ คํ ์ค๊ณ
- ๋ฐ์ดํฐ ์บ์ ๋น์ค์ด ํฌ๋ค -> ๊ฒ์ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ฒ๋ฆฌ๊ฐ ์ค์ฌ
6. ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ '์ํน ๋ฉ๋ชจ๋ฆฌ'
์ํน ๋ฉ๋ชจ๋ฆฌ
๋ก๊ทธ ๋ฒํผ, ๋ฐ์ดํฐ ์บ์ ์ธ์ ์ ๋ ฌ ๋๋ ํด์ ๊ด๋ จ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ์์ ์ฉ ์์ญ
์ฒ๋ฆฌ๊ฐ ์ข ๋ฃ๋๋ฉด ํด์ ๋๋ ์์ ์์ญ
๋ค๋ฃจ๋ ค๋ ๋ฐ์ดํฐ ์๋ณด๋ค ์ํน ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ์์ผ๋ฉด ์ ์ฅ์(์ผ์ ์์ญ)๋ฅผ ์ฌ์ฉ, ์ผ์ ์์ญ์ ์ ๊ทผ ์๋๊ฐ ๋๋ฆผ
์ ๋ ฌ: ORDER BY ๊ตฌ, ์งํฉ ์ฐ์ฐ, ์๋์ฐ ํจ์ ๋ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ์คํ
ํด์: ํ ์ด๋ธ ๋ฑ์ ๊ฒฐํฉ์์ ํด์ ๊ฒฐํฉ์ด ์ฌ์ฉ๋ ๋ ์คํ
์ ์ฅ์๊ฐ ๋ถ์กฑํด์ง๋ฉด?
์ ์ฅ์์ ์ ๊ทผํ๋ฉด ์ ์ฒด์ ์ธ ์๋๊ฐ ๋๋ ค์ง์ง๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ค๊ณ ์ฒ๋ฆฌ๊ฐ ๋ฉ์ถ๊ฑฐ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ ์์
์ฌ๋ฌ ๊ฐ์ SQL ๊ตฌ๋ฌธ๋ค์ด ๊ณต์ ํด ์ฌ์ฉํ๋ ์์ญ์ด๋ฏ๋ก ๋ถํ ๊ฒ์ฌ(ํ๋์ SQL๊ตฌ๋ฌธ ์คํ ์ ์ ๋์ํ์ง๋ง ์ฌ๋ฌ๊ฐ๋ฅผ ์คํ ์ ๋ฉ๋ชจ๋ฆฌ ๋์น๋ ์ํฉ์ ์ฌํํ๋ ๊ฒ์ฌ)๋ฅผ ์ค์ํ์ง ์๋ ์ด์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ ์์ธกํ๊ธฐ ์ด๋ ค์
4์ฅ์ GROUP BY, 6์ฅ์ ํด์ ๊ฒฐํฉ๊ณผ ๊ด๋ จ๋ โฌ๏ธ
DBMS์ ์คํ ๊ณํ
1.๊ถํ ์ด์์ ์ข์
SQL์ ์ด๋์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฐพ๊ณ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ธ๋ถ ์ฌํญ์ ์ ํ ๊ธฐ์ ํ์ง ์๊ณ ๋น์ ์ฐจ์ ์ผ๋ก ์ฌ์ฉ
์ฌ์ฉ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํ ์ ์ฐจ(how)๋ฅผ ์ฑ ์์ง๊ณ ๊ธฐ์ ํ์ง ์๊ณ , ๋์(what)์ ๊ธฐ์ ํ๊ธฐ๋ง ํ๋ฉด ๋จ
๋น์ฆ๋์ค ์ ์ฒด์ ์์ฐ์ฑ์ ํฅ์
2. ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ ๊ฒฐ์ ํ๊ธฐ
๋ฐ์ดํฐ ์ ๊ทผ ์ ์ฐจ๋ฅผ ๊ฒฐ์ ํ๋ ์ฟผ๋ฆฌ ํ๊ฐ ์์ง์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ SQL ๊ตฌ๋ฌธ์ ์ฒ์ ์ฝ์ด๋ค์
์ฟผ๋ฆฌ ํ๊ฐ ๋ชจ๋์ ์ถ๊ฐ๋ก ํ์ ๋๋ ์ตํฐ๋ง์ด์ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ ์๋ธ ๋ชจ๋๋ก ๊ตฌ์ฑ๋จ
ํ์
์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ SQL ๊ตฌ๋ฌธ์ ๋ถ์, ๊ฒ์ฌ
SQL ๊ตฌ๋ฌธ์ ์ ํ์ ์ธ ํ์์ผ๋ก ๋ณํํด์ฃผ์ด DBMS ๋ด๋ถ์์ ์ผ์ด๋๋ ํ์ ์ฒ๋ฆฌ ํจ์จํ
์ตํฐ๋ง์ด์
๋ฐ์ดํฐ ์ ๊ทผ๋ฒ(์คํ ๊ณํ)์ ์ต์ ํ: DBMS์ ํต์ฌ
์ธ๋ฑ์ค ์ ๋ฌด, ๋ฐ์ดํฐ ๋ถ์ฐ ๋๋ ํธํฅ ์ ๋, DBMS ๋ด๋ถ ๋งค๊ฐ๋ณ์ ๋ฑ์ ์กฐ๊ฑด์ ๊ณ ๋ คํด
- ์ ํ ๊ฐ๋ฅํ ๋ง์ ์คํ ๊ณํ์ ์์ฑ
- ๊ฐ ์คํ ๊ณํ์ ๋น์ฉ์ ์ฐ์ฐ
๊ฐ์ฅ ๋ฎ์ ๋น์ฉ์ ๊ฐ์ง ์คํ ๊ณํ ์ ํ
์นดํ๋ก๊ทธ ๋งค๋์
์ตํฐ๋ง์ด์ ๊ฐ ์คํ ๊ณํ์ ์ธ์ธ ๋ ์ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณต
์นดํ๋ก๊ทธ: DBMS์ ๋ด๋ถ ์ ๋ณด๋ฅผ ๋ชจ์๋์ ํ ์ด๋ธ๋ค, ํ ์ด๋ธ ๋๋ ์ธ๋ฑ์ค์ ํต๊ณ ์ ๋ณด ์ ์ฅ
ํ๋ ํ๊ฐ
SQL ๊ตฌ๋ฌธ์์ ์ธ์ด ์คํ ๊ณํ๋ค ์ค ์ต์ ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ ๊ณผ์
์ฑ๋ฅ์ด ์ข์ง ์์ SQL ๊ตฌ๋ฌธ์ด ์์ ๋ ์คํ ๊ณํ์ ์ฝ๊ณ ์์ ๋ฐฉ์ ๋ฑ ๊ณ ๋ ค ๊ฐ๋ฅ

์คํ ๊ณํ์ด ์ ํ๋๋ฉด DBMS๋ ์คํ ๊ณํ์ ์ ์ฐจ์ ์ธ ์ฝ๋๋ก ๋ณํํ๊ณ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ํํจ
3. ์ตํฐ๋ง์ด์ ์ ํต๊ณ ์ ๋ณด
์นดํ๋ก๊ทธ ๋งค๋์ ๊ฐ ๊ด๋ฆฌํ๋ ํต๊ณ ์ ๋ณด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง๋์ด๊ฐ ํญ์ ์ ๊ฒฝ์จ์ผ ํจ
ํต๊ณ ์ ๋ณด๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ตํฐ๋ง์ด์ ์์ ์ต์ ์ ํ๋์ ์ ํํ์ง ๋ชปํ ์ ์์
์นดํ๋ก๊ทธ์ ํฌํจ๋ ํต๊ณ ์ ๋ณด
- ๊ฐ ํ ์ด๋ธ์ ๋ ์ฝ๋ ์
- ๊ฐ ํ ์ด๋ธ์ ํ๋ ์์ ํ๋ ํฌ๊ธฐ
- ํ๋์ ์นด๋๋๋ฆฌํฐ(๊ฐ์ ๊ฐ์)
- ํ๋๊ฐ์ ํ์คํ ๊ทธ๋จ(๊ฐ์ ๋ถํฌ)
- ํ๋ ๋ด๋ถ์ NULL ์
- ์ธ๋ฑ์ค ์ ๋ณด
์นดํ๋ก๊ทธ ์ ๋ณด๊ฐ ์ค์ ์ ์ผ์นํ์ง ์์ ๋, ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ฝ์ /๊ฐฑ์ /์ ๊ฑฐ ์ ์นดํ๋ก๊ทธ ์ ๋ณด๊ฐ ๊ฐฑ์ ๋์ง ์์ ๋ -> ์ตํฐ๋ง์ด์ ๋ ๊ณผ๊ฑฐ ์ ๋ณด๋ก ๊ณํ์ ์ธ์ฐ๋ฏ๋ก ์ต์ ์ ํ๋์ ์ธ์ธ ์ ์์
4. ์ต์ ์ ์คํ ๊ณํ ์์ฑ
ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ด ๋ฐ๋๋ฉด ์นดํ๋ก๊ทธ์ ํต๊ณ ์ ๋ณด๋ ๊ฐฑ์ ํด์ผ ํจ
ํต๊ณ ์ ๋ณด ๊ฐฑ์ ์ ๋์ ํ ์ด๋ธ, ์ธ๋ฑ์ค์ ํฌ๊ธฐ์ ์์ ๋ฐ๋ผ ๋ช์ญ๋ถ~๋ช์๊ฐ์ด ์์๋๋ ์คํ๋น์ฉ์ด ๋์ ์์
์ต์ ์ ํ๋ ์ ํ์ ํ์ํ ์กฐ๊ฑด์ด๋ฏ๋ก ๊ฐฑ์ ์์ ์ ํ์คํ ๊ฒํ ํ์
๋ํ์ ์ธ DBMS์ ํต๊ณ ์ ๋ณด ๊ฐฑ์ ๋ช ๋ น์ด
| ์ด๋ฆ | ๋ช ๋ น์ด |
| Oracle | exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => [์คํค๋ง ์ด๋ฆ], TABNAME => [ํ ์ด๋ธ ์ด๋ฆ]); |
| Microsoft SQL Server | UPDATE STATISTICS [ํ ์ด๋ธ ์ด๋ฆ] |
| DB2 | RUNSTATS ON TABLE [์คํค๋ง ์ด๋ฆ], [ํ ์ด๋ธ ์ด๋ฆ]; |
| PostgreSQL | ANALYZE [์คํค๋ง ์ด๋ฆ], [ํ ์ด๋ธ ์ด๋ฆ]; |
| MySQL | ANALYZE TABLE [์คํค๋ง ์ด๋ฆ], [ํ ์ด๋ธ ์ด๋ฆ]; |
์คํ ๊ณํ์ด SQL ๊ตฌ๋ฌธ์ ์ฑ๋ฅ์ ๊ฒฐ์
1.์คํ ๊ณํ ํ์ธ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ๊ฐ ๋ง์ ํ ์ด๋ธ์ ์ ๊ทผํ๊ฑฐ๋ ๋ณต์กํ SQL ๊ตฌ๋ฌธ ์คํ ์ ์ต์ ์ ๊ฒฝ๋ก์ด๋๋ผ๋ ์ง์ฐ ๋ฐ์
-> ๊ฐ์ฅ ๋จผ์ ์คํ ๊ณํ์ ์ดํด๋ด์ผ ํจ
์คํ ๊ณํ์ ํ์ธํ๋ ๋ช ๋ น์ด
| ์ด๋ฆ | ๋ช ๋ น์ด |
| Oracle | set autotrace traceonly |
| Microsoft SQL Server | SET SHOWPLAN_TEXT ON |
| DB2 | EXPLAIN ALL WITH SNAPSHOT FOR SQL ๊ตฌ๋ฌธ |
| PostgreSQL | EXPLAIN SQL ๊ตฌ๋ฌธ |
| MySQL | EXPLAIN EXTENDED SQL ๊ตฌ๋ฌธ |
2.ํ ์ด๋ธ ํ ์ค์บ์ ์คํ ๊ณํ
๋ ์ฝ๋ ์ ์ฒด๋ฅผ ๊ฒ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์คํ ๊ณํ
EXPLAIN
SELECT * FROM Shops;
์กฐ์ ๋์ ๊ฐ์ฒด
์ฌ์ฉํ๋ ํ ์ด๋ธ์ ์ถ๋ ฅ
์ฌ๋ฌ ํ ์ด๋ธ์ ์ฌ์ฉํ ๋ ํผ๋ํ์ง ์๋๋ก ์ฃผ์
ํ ์ด๋ธ ์ธ์ ์ธ๋ฑ์ค, ํํฐ์ , ์ํ์ค์ฒ๋ผ SQL ๊ตฌ๋ฌธ์ผ๋ก ์กฐ์ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ ๋์์ด ๋ ์ ์์
๊ฐ์ฒด์ ๋ํ ์กฐ์ ์ข ๋ฅ
์คํ ๊ณํ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ
Oracle: 'Operation'ํ๋์ ๋ํ๋จ, 'TABLE ACCESS FULL' ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ๋ถ ์ฝ์ด๋ค์
PostgreSQL: 'Seq Scan' ์์ฐจ์ ์ธ ์ ๊ทผ์ ์ค์๋ง, ํ์ผ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ์ฝ์ด๋
์ค์ง์ ์ผ๋ก Oracle๋ ์ํ์ ์ค์บ์ ํ๋ฏ๋ก ๋ ๊ฐ์ง๊ฐ ๊ฐ๋ค๊ณ ์๊ฐํด๋ ๋จ, ์ด๋ฌํ ํํ์ ์ ๊ทผ๋ฒ์ 'ํ ์ด๋ธ ํ ์ค์บ'์ด๋ผ๊ณ ๋ถ๋ฆ
์คํ ๊ณํ์ ์ถ๋ ฅ๋๋ ๋น์ฉ, ์คํ ์๊ฐ, ์ฒ๋ฆฌ ๋ ์ฝ๋ ์๋ ์ถ์ ๊ฐ์ด๋ฏ๋ก ์งํ๋ก ์ฌ์ฉํ๋ฉด ์๋จ
+) ์ค์ ๊ฐ์ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ด ์๋ DBMS๋ ์์
์กฐ์ ๋์์ด ๋๋ ๋ ์ฝ๋ ๊ฐ์
Rows๋ผ๋ ํญ๋ชฉ์ ์ถ๋ ฅ๋จ
๊ฒฐํฉ ๋๋ ์ง์ฝ์ด ํฌํจ๋๋ฉด 1๊ฐ์ ๊ตฌ๋ฌธ์ ์คํํด๋ ์ฌ๋ฌ ๊ฐ์ ์กฐ์์ด ์ํ๋จ
SQL ๊ตฌ๋ฌธ ์ ์ฒด์ ์คํ ๋น์ฉ ํ์ ์ ๊ฐ ์กฐ์์์ ์ผ๋ง๋งํผ์ ๋ ์ฝ๋๊ฐ ์ฒ๋ฆฌ๋๋์ง๊ฐ ์ค์ํ ์งํ์
์ค์ SQL ๊ตฌ๋ฌธ์ ์คํํ ์์ ์ ํ ์ด๋ธ ๋ ์ฝ๋ ์์ ์นดํ๋ก๊ทธ ์ ๋ณด๊ฐ ๋ค๋ฅผ ์ ์์ -> ์ตํฐ๋ง์ด์ ์ ์ค์๊ฐ ํ ์ด๋ธ ์ ๋ณด ๋ฐ์ X
3. ์ธ๋ฑ์ค ์ค์บ์ ์คํ ๊ณํ
EXPLAIN
SELECT * FROM Shops WHERE shop_id='00050';
์กฐ์ ๋์์ด ๋๋ ๋ ์ฝ๋ ๊ฐ์
๊ธฐ๋ณธํค์ธ id๋ฅผ ์ง์ ํ์ผ๋ฏ๋ก ์ ๊ทผ ๋์์ ๋ ์ฝ๋ ํ ๊ฐ์
์ ๊ทผ ๋์ ๊ฐ์ฒด์ ์กฐ์
PostgreSQL: 'Index Scan'
Oracle: 'INDEX UNIQUE SCAN' - ๋ชจ์งํฉ ๋ ์ฝ๋ ์์์ ์ ํ๋๋ ๋ ์ฝ๋ ์๊ฐ ์ ๋ค๋ฉด ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ ๊ทผ ์ํ
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ์ค์บ์ ์ํํ๋ค๋ ์๋ฏธ

๋ ์ฝ๋ ์๊ฐ ํน์ ๋ฐ์ดํฐ์(N)๋ณด๋ค ๋ง์ ์์ผ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ์ค์บ์ด ํจ์จ์ ์ธ ์ ๊ทผ์ ํ๊ฒ ๋จ
4. ๊ฐ๋จํ ํ ์ด๋ธ ๊ฒฐํฉ์ ์คํ ๊ณํ
SQL์์ ์ง์ฐ์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๊ฒฐํฉ๊ณผ ๊ด๋ จ๋จ
EXPLAIN
SELECT * FROM Shops S INNER JOIN Reservations R ON S.shop_id=R.shop_id;
DBMS์์ ๊ฒฐํฉ ์ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ์ธ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ
Nested Loops: ํ์ชฝ ํ ์ด๋ธ์ ์ฝ์ผ๋ฉฐ ๋ ์ฝ๋ ํ๋๋ง๋ค ๊ฒฐํฉ ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ชฝ ํ ์ด๋ธ์์ ์ฐพ์ (์ด์ค ๋ฐ๋ณต)
Sort Merge: ๊ฒฐํฉ ํค๋ก ๋ ์ฝ๋๋ฅผ ์ ๋ ฌํ๊ณ ์์ฐจ์ ์ผ๋ก ๋ ํ ์ด๋ธ์ ๊ฒฐํฉ, ์ ๋ ฌ ์ ์ํน ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ
Hash: ๊ฒฐํฉ ํค ๊ฐ์ ํด์๊ฐ์ผ๋ก ๋งคํ, ํด์ ํ ์ด๋ธ์ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ์์ ์ฉ ๋ฉ๋ชจ๋ฆฌ ์์ญ ํ์
๊ฐ์ฒด์ ๋ํ ์กฐ์ ์ข ๋ฅ
Oracle, PostgreSQL ๋ชจ๋ 'nested loops' ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ

Reservation ํ ์ด๋ธ๊ณผ Shop ํ ์ด๋ธ ์ ๊ทผ์ด ๊ฐ์ ์ค์ฒฉ ๋จ๊ณ์ ์์ง๋ง Reservation ํ ์ด๋ธ์ ๋จผ์ ์ ๊ทผํจ
์คํ ๊ณํ์ ์ค์์ฑ
์ตํฐ๋ง์ด์ ์ ์คํ ๊ณํ์ด ์ต์ ์ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ฉด ๊ฐ๋ฐ์๊ฐ ํํธ ๊ตฌ์ ๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ ๋ช ๋ นํ ์ ์๋๋ก ํจ
SQL ๊ตฌ๋ฌธ๋ค์ด ์ด๋ค ์ ๊ทผ ๊ฒฝ๋ก๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋์ง,
์ด๋ค ํ ์ด๋ธ ์ค์ ์ด ํจ์จ์ ์ธ์ง,
์ด๋ค SQL ๊ตฌ๋ฌธ์ด ์ฃผ์ด์ก์ ๋ ์ด๋ค ์คํ ๊ณํ์ด ๋์ฌ์ง ์์ธกํ ์ ์์ด์ผ ์คํ ๊ณํ์ ๋ณ๊ฒฝํ ์ ์๋ค
'SQL > SQL ๋ ๋ฒจ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQL ๋ ๋ฒจ์ ] 6์ฅ: ๊ฒฐํฉ (0) | 2022.04.25 |
|---|---|
| [SQL ๋ ๋ฒจ์ ] 5์ฅ: ๋ฐ๋ณต๋ฌธ (0) | 2022.04.18 |
| [SQL ๋ ๋ฒจ์ ] 4์ฅ: ์ง์ฝ๊ณผ ์๋ฅด๊ธฐ (0) | 2022.04.18 |
| [SQL ๋ ๋ฒจ์ ] 3์ฅ: SQL์ ์กฐ๊ฑด ๋ถ๊ธฐ (0) | 2022.04.11 |
| [SQL ๋ ๋ฒจ์ ] 2์ฅ: SQL ๊ธฐ์ด (0) | 2022.04.10 |
๋๊ธ