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

[SQL ๋ ˆ๋ฒจ์—…] 1์žฅ: DBMS ์•„ํ‚คํ…์ฒ˜

by oliviarla 2022. 4. 3.
๐Ÿ“ 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 ๋‚ด๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์˜ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•ด

  1.  ์„ ํƒ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์‹คํ–‰ ๊ณ„ํš์„ ์ž‘์„ฑ
  2.  ๊ฐ ์‹คํ–‰ ๊ณ„ํš์˜ ๋น„์šฉ์„ ์—ฐ์‚ฐ

๊ฐ€์žฅ ๋‚ฎ์€ ๋น„์šฉ์„ ๊ฐ€์ง„ ์‹คํ–‰ ๊ณ„ํš ์„ ํƒ

์นดํƒˆ๋กœ๊ทธ ๋งค๋‹ˆ์ €

์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ์„ธ์šธ ๋•Œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณต

์นดํƒˆ๋กœ๊ทธ: 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 ๊ตฌ๋ฌธ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์–ด๋–ค ์‹คํ–‰ ๊ณ„ํš์ด ๋‚˜์˜ฌ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค

๋Œ“๊ธ€