DBMS ์•„ํ‚คํ…์ฒ˜

sql

DBMS ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

https://yongineer.duckdns.org/sql/042.png

๊ทธ๋ฆผ์—์„œ ์œ„์— ์žˆ๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž (์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ)์™€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค ์—ฌ๊ธฐ์„œ ์ „๋‹ฌ๋œ SQL๊ตฌ๋ฌธ์€ ์ค‘๊ฐ„์— ์žˆ๋Š” DBMS๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €์žฅ ์žฅ์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ฒŒ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๋ถ€๋ถ„์€ ์ค‘๊ฐ„์— ์žˆ๋Š” DBMS์—์„œ ์ผ์–ด๋‚˜๋Š” โ€˜๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌโ€™์ด๋‹ค.

1. ์ฟผ๋ฆฌ ํ‰๊ฐ€ ์—”์ง„

์ฟผ๋ฆฌ ํ‰๊ฐ€ ์—”์ง„์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ SQL ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•˜๊ณ , ์–ด๋–ค ์ˆœ์„œ๋กœ ๊ธฐ์–ต์žฅ์น˜์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋•Œ ๊ฒฐ์ •๋˜๋Š” ๊ณ„ํš์„ โ€˜์‹คํ–‰ ๊ณ„ํšโ€™ (๋˜๋Š” โ€˜์‹คํ–‰ ํ”Œ๋žœโ€™)์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํ–‰ ๊ณ„ํš์— ๊ธฐ๋ฐ˜์„ ๋‘ฌ์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ โ€˜์ ‘๊ทผ ๋ฉ”์„œ๋“œ (access method)โ€˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ํ•œ๋งˆ๋””๋กœ ์ฟผ๋ฆฌ ํ‰๊ฐ€ ์—”์ง„์€ ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  ์‹คํ–‰ํ•˜๋Š” DBMS์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

์ถ”๊ฐ€๋กœ โ€˜์ฟผ๋ฆฌ(query)โ€˜๋Š” โ€˜์งˆ์˜โ€™๋ฅผ ์˜๋ฏธํ•˜๋Š” ์˜์–ด ๋‹จ์–ด์ด๋‹ค. ์ข์€ ์˜๋ฏธ๋กœ๋Š” SELECT ๊ตฌ๋ฌธ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ง์ด๋ฉฐ ํฐ ์˜๋ฏธ๋กœ๋Š” SQL ๊ตฌ๋ฌธ ์ „์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

2. ๋ฒ„ํผ ๋งค๋‹ˆ์ €

DBMS๋Š” ๋ฒ„ํผ๋ผ๋Š” ํŠน๋ณ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ™•๋ณดํ•ด๋‘”๋‹ค. ์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋ฒ„ํผ ๋งค๋‹ˆ์ €์ด๋‹ค.

๋ฒ„ํผ ๋งค๋‹ˆ์ €๋Š” ๋””์Šคํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋งค๋‹ˆ์ €์™€ ํ•จ๊ป˜ ์—ฐ๋™๋˜์–ด ์ž‘๋™ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋งค์ปค๋‹ˆ์ฆ˜๋„ ์„ฑ๋Šฅ๊ณผ ์ค‘์š”ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค.

3. ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋งค๋‹ˆ์ €

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋žจ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋งค๋‹ˆ์ €๋Š” ์–ด๋””์— ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ณ  ์“ฐ๊ธฐ๋ฅผ ์ œ์–ดํ•œ๋‹ค.

4. ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์™€ ๋ฝ ๋งค๋‹ˆ์ €

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ˆ˜๋ฐฑ์—์„œ ์ˆ˜์ฒœ๋ช…์˜ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ๋‹ค. ์ด๋•Œ ๊ฐ๊ฐ์˜ ์ฒ˜๋ฆฌ๋Š” DBMS ๋‚ด๋ถ€์—์„œ ํŠธ๋žœ์žญ์…˜์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠธ๋žœ์žญ์…˜์˜ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์‹คํ–‰์‹œํ‚ค๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์— ๋ฝ์„ ๊ฑธ์–ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์š”์ฒญ์„ ๋Œ€๊ธฐ์‹œํ‚ค๋Š” ๊ฒƒ์ด ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์™€ ๋ฝ ๋งค๋‹ˆ์ €์˜ ์—ญํ• ์ด๋‹ค.

5. ๋ฆฌ์ปค๋ฒ„๋ฆฌ ๋งค๋‹ˆ์ €

์‹œ์Šคํ…œ์€ ์–ธ์ œ๋‚˜ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ๋ฐฑ์—…ํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ ๋ณต๊ตฌํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌ์ปค๋ฒ„๋ฆฌ ๋งค๋‹ˆ์ €์ด๋‹ค.

DBMS์™€ ๋ฒ„ํผ

1. ๊ณต์งœ ๋ฐฅ์€ ์กด์žฌํ• ๊นŒ?

๊ธฐ์–ต์žฅ์น˜๋Š” ๊ธฐ์–ต ๋น„์šฉ(๋˜๋Š” ๊ธฐ์–ต ์ฝ”์ŠคํŠธ)์— ๋”ฐ๋ผ 1์ฐจ๋ถ€ํ„ฐ 3์ฐจ๊นŒ์ง€์˜ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ๊ธฐ์–ต ๋น„์šฉ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ โ€˜๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์†Œ๋ชจ๋˜๋Š” ๋น„์šฉโ€™์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†์ ์œผ๋กœ ์ €์žฅํ•˜๋ ค๋ฉด ์†๋„๋ฅผ ์žƒ๊ณ , ์†๋„๋ฅผ ์–ป๊ณ ์ž ํ•˜๋ฉด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

2. DBMS์™€ ๊ธฐ์–ต์žฅ์น˜์˜ ๊ด€๊ณ„

DBMS๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด์ด๋‹ค.

ํ•˜๋“œ๋””์Šคํฌ(HDD)

DBMS๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋งค์ฒด(์ €์žฅ์†Œ)๋Š” ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„ HDD์ด๋‹ค. ํ•˜๋“œ๋””์Šคํฌ๋Š” ๊ธฐ์–ต์žฅ์น˜ ๊ณ„์ธต์—์„œ ํ•œ๊ฐ€์šด๋ฐ์— ์žˆ๋Š” 2์ฐจ ๊ธฐ์–ต์žฅ์น˜๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ์ผ๋ฐ˜์ ์ธ DBMS๋Š” ํ•ญ์ƒ ๋””์Šคํฌ ์ด์™ธ์˜ ์žฅ์†Œ์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ ค ๋†“๋Š”๋‹ค. ๋ฐ”๋กœ 1์ฐจ ๊ณ„์ธต์˜ ๊ธฐ์–ต์žฅ์น˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋ง์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ

๋ฉ”๋ชจ๋ฆฌ๋Š” ๋””์Šคํฌ์— ๋น„ํ•ด ๊ธฐ์–ต ๋น„์šฉ์ด ๊ต‰์žฅํžˆ ๋น„์‹ธ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ํƒ‘์žฌ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์€ ํ•œ๋‘ ์ž๋ฆฌ ์ •๋„์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ทœ๋ชจ ์žˆ๋Š” ์ƒ์šฉ ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฒ„ํผ๋ฅผ ํ™œ์šฉํ•œ ์†๋„ ํ–ฅ์ƒ

DBMS๊ฐ€ ์ผ๋ถ€๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋•Œ๋ฌธ์ด๋‹ค. ํ•œ๋งˆ๋””๋กœ SQL๊ตฌ๋ฌธ์˜ ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ž์ฃผ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ ค๋‘”๋‹ค๋ฉด, ๊ฐ™์€ SQL ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š” ์—†์ด ๊ณง๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋””์Šคํฌ ์ ‘๊ทผ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ต‰์žฅํžˆ ํฐ ํญ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋ฐ˜์ ์ธ SQL๊ตฌ๋ฌธ์˜ ์‹คํ–‰ ์‹œ๊ฐ„ ๋Œ€๋ถ€๋ถ„์„ ์ €์žฅ์†Œ I/O์— ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ชฉ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฒ„ํผ(buffer) ๋˜๋Š” ์บ์‹œ(cache)๋ผ๊ณ  ํ•œ๋‹ค. ๋ชจ๋‘ ๋ฌผ๋ฆฌ์ ์ธ ๋งค์ฒด๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋“œ๋””์Šคํฌ ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.

์ด๋Ÿฌํ•œ ๊ณ ์† ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ์— โ€˜๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์–ด๋А ์ •๋„์˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ์˜ฌ๋ฆด์ง€โ€™๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด DBMS์˜ ๋ฒ„ํผ ๋งค๋‹ˆ์ €์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ๋ฒ„ํผ ๋งค๋‹ˆ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์— ๊ดธ์žฅํžˆ ์ค‘์š”ํ•œ ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ๋‹ค์–‘ํ•œ ์บ์‹œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์บ์‹œ์— ์ €์žฅํ•ด์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋‹ค์‹œ SQL๊ตฌ๋ฌธ์„ ๋ฐœํ–‰ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋„ ์ผ์ข…์˜ ์บ์‹œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๊ฐ„๋‹จํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ณ„์ธต์˜ ์บ์‹œ๋ฅผ ๋งŽ์ด ํ• ๋‹นํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”, ์„œ๋ฒ„์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์••๋ฐ•ํ•˜์ง€ ์•Š๋Š” ๋ฒ”์œ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ ์บ์‹œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ํŽธ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋” ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ํ• ๋‹นํ•ด๋ฒ„๋ฆฌ๋ฉด, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ ๊ฐˆ๋˜์–ด ๋ฒ„๋ ค ์šด์˜์ฒด์ œ ๋‹จ์—์„œ ์Šค์™‘์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์Šฌ๋กœ ๋‹ค์šด์ด ์ผ์–ด๋‚˜ ์ฃผ๊ฐ์ „๋„๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ๊ผด์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ผ๋งˆ๋‚˜ ํ• ๋‹นํ• ์ง€ ํŒ๋‹จํ•  ๋•Œ๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ โ€˜๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฒ”์œ„์—์„œ ๊ฐ€๋Šฅํ•œ ๋งŽ์ดโ€™๊ฐ€ ์›์น™์ด๋‹ค.

3. ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์žˆ๋Š” ๋‘๊ฐœ์˜ ๋ฒ„ํผ

DBMS๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ

  • ๋ฐ์ดํ„ฐ ์บ์‹œ
  • ๋กœ๊ทธ ๋ฒ„ํผ

๋ฒ„ํผ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์šฉ๋„์— ๋”ฐ๋ผ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฐ์ดํ„ฐ ์บ์‹œ

๋ฐ์ดํ„ฐ ์บ์‹œ๋Š” ๋””์Šคํฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. SELECT๊ตฌ๋ฌธ์—์„œ ์„ ํƒํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์šด ์ข‹๊ฒŒ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ์บ์‹œ์— ์žˆ๋‹ค๋ฉด, ๋””์Šคํฌ์™€ ๊ฐ™์€ ์ €์† ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉฐ ๋”ฐ๋ผ์„œ ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ•œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์šด ๋‚˜์˜๊ฒŒ ๋ฒ„ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ์ €์† ์ €์žฅ์†Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๋Ÿฌ ๊ฐ€์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ SQL ๊ตฌ๋ฌธ์˜ ์‘๋‹ต ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค.

๋กœ๊ทธ ๋ฒ„ํผ

๋กœ๊ทธ ๋ฒ„ํผ๋Š” ๊ฐฑ์‹ ์ฒ˜๋ฆฌ (INSERT, DELETE, UPDATE, MERGE)์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค. DBMS๋Š” ๊ฐฑ์‹ ๊ณผ ๊ด€๋ จ๋œ SQL๊ตฌ๋ฌธ์„ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์œผ๋ฉด, ๊ณง๋ฐ”๋กœ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ผ๋‹จ ๋กœ๊ทธ ๋ฒ„ํผ ์œ„์— ๋ณ€๊ฒฝ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ณ  ์ดํ›„ ๋””์Šคํฌ์— ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ๋Š” SQL๊ตฌ๋ฌธ์˜ ์‹คํ–‰ ์‹œ์ ๊ณผ ์ €์žฅ์†Œ์— ๊ฐฑ์‹ ํ•˜๋Š” ์‹œ์ ์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์ด๋‹ค. SQL๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ ๋‹จ์ˆœํžˆ ์ €์žฅ์†Œ ์ƒ์˜ ํŒŒ์ผ์„ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•ด๋ฒ„๋ฆฌ๋Š” ํŽธ์ด ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ทธ๋Ÿผ์—๋„ DBMS๊ฐ€ ์ด๋Ÿฌํ•œ ์‹œ์  ์ฐจ์ด๋ฅผ ๋‘๋Š” ์ด์œ ๋Š” ์—ญ์‹œ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์ €์žฅ์†Œ๋Š” ๊ฒ€์ƒ‰๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐฑ์‹ ์„ ํ•  ๋•Œ๋„ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ €์žฅ์†Œ ๋ณ€๊ฒฝ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์‚ฌ์šฉ์ž๋Š” ์žฅ๊ธฐ๊ฐ„ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ๋ฒˆ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐฑ์‹  ์ •๋ณด๋ฅผ ๋ฐ›์€ ์‹œ์ ์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ•ด๋‹น SQL๊ตฌ๋ฌธ์ด โ€˜๋๋‚ฌ๋‹คโ€™๋ผ๊ณ  ํ†ต์ง€ํ•˜๊ณ , ๋‚ด๋ถ€์ ์œผ๋กœ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์† ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

4. ๋ฉ”๋ชจ๋ฆฌ์˜ ์„ฑ์งˆ์ด ์ดˆ๋ž˜ํ•˜๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

ํœ˜๋ฐœ์„ฑ

๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์ด ์—†๋‹ค. ํ•˜๋“œ์›จ์–ด์˜ ์ „์›์„ ๊บผ๋ฒ„๋ฆฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ํœ˜๋ฐœ์„ฑ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

DBMS์— ์–ด๋–ค ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ”„๋กœ์„ธ์Šค๋‹ค์šด์ด ์ผ์–ด๋‚˜๋ฉด(์ฆ‰, ์„œ๋ฒ„๊ฐ€ ์ฃฝ์œผ๋ฉด). ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ„๋‹ค. ๊ฒฐ๊ตญ ๋ฏธ๋ž˜์— ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€๊ฒฉ์ด ์—„์ฒญ๋‚˜๊ฒŒ ์‹ธ์ง„๋‹ค๊ณ  ํ•ด๋„ ์˜์†์„ฑ์ด ์—†๋Š” ์ด์ƒ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋””์Šคํฌ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

ํœ˜๋ฐœ์„ฑ์˜ ๋ฌธ์ œ์ 

ํœ˜๋ฐœ์„ฑ์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ ์€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์‚ฌ๋ผ์ ธ๋ฒ„๋ ค ๋ฐ์ดํ„ฐ ๋ถ€์ •ํ•ฉ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ ์บ์‹œ๋ผ๋ฉด ์žฅ์• ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ ธ๋ฒ„๋ ค๋„, ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ๋””์Šคํฌ ์œ„์— ๋‚จ์•„์žˆ์œผ๋ฏ€๋กœ ์•„๋ฌด๋ฌธ์ œ์—†๋‹ค.

ํ•˜์ง€๋งŒ ๋กœ๊ทธ ๋ฒ„ํผ ์œ„์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋””์Šคํฌ ์œ„์— ๋กœ๊ทธํŒŒ์ผ์— ๋ฐ˜์˜๋˜๊ธฐ ์ „์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์‚ฌ๋ผ์ ธ๋ฒ„๋ฆฐ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์™„์ „ํžˆ ์‚ฌ๋ผ์ ธ์„œ ๋ณต๊ตฌ์กฐ์ฐจ ๋ถˆ๊ฐ€๋Šฅํ•ด์งˆ ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ํ–ˆ๋˜ ๊ฐฑ์‹  ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ๊ด€์ ์—์„œ ๊ต‰์žฅํžˆ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ด๋‹ค. ์€ํ–‰ ์ž…์ถœ๊ธˆ ๋˜๋Š” ์นด๋“œ ์ธ์ถœ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋กœ๊ทธ ํŒŒ์ผ์— ์ „๋‹ฌ๋œ ๊ฐฑ์‹  ์ •๋ณด๊ฐ€ DBMS๊ฐ€ ๋‹ค์šด๋  ๋•Œ ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์€ DBMS๊ฐ€ ๊ฐฑ์‹ ์„ ๋น„๋™๊ธฐ๋กœ ํ•˜๋Š” ์ด์ƒ, ์–ธ์ œ๋“  ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ํšŒํ”ผํ•˜๊ณ ์ž DBMS๋Š” ์ปค๋ฐ‹ ์‹œ์ ์— ๋ฐ˜๋“œ์‹œ ๊ฐฑ์‹  ์ •๋ณด๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ(์ด๋Š” ์˜์†์ ์ธ ์ €์žฅ์†Œ ์œ„์— ์กด์žฌ)์— ์”€์œผ๋กœ์จ, ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์ปค๋ฐ‹(Commit)์ด๋ž€ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ๋ฅผ โ€˜ํ™•์ •โ€™ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. DBMS๋Š” ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†ํ™” ํ•œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ์ปค๋ฐ‹ ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๋””์Šคํฌ์— ๋™๊ธฐ์ ‘๊ทผ์ด ์ผ์–ด๋‚œ๋‹ค. ๊ฒฐ๊ตญ ์—ฌ๊ธฐ์„œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ๋””์Šคํฌ์— ๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์€ ๋†’์•„์ง€์ง€๋งŒ ์„ฑ๋Šฅ์€ ๋‚ฎ์•„์ง„๋‹ค. ๋ฐ˜๋Œ€๋กœ ์„ฑ๋Šฅ์„ ๋†’์ด๋ ค๋ฉด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค. ์ด ๋‘๊ฐ€์ง€ ์„ ํƒ ์‚ฌํ•ญ์€ ํ˜„์žฌ์—๋„ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ฉํžˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

5. ์‹œ์Šคํ…œ ํŠน์„ฑ์— ๋”ฐ๋ฅธ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

๋ฐ์ดํ„ฐ ์บ์‹œ์™€ ๋กœ๊ทธ ๋ฒ„ํผ์˜ ํฌ๊ธฐ

https://yongineer.duckdns.org/sql/043.png

๋ฐ์ดํ„ฐ ์บ์‹œ์™€ ๋กœ๊ทธ ๋ฒ„ํผ๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด 3๊ฐœ์˜ DBMS์—์„œ ๊ณตํ†ต์œผ๋กœ ๋ฐ์ดํ„ฐ ์บ์‹œ์— ๋น„ํ•ด ๋กœ๊ทธ ๋ฒ„ํผ์˜ ์ดˆ๊นƒ๊ฐ’์ด ๊ดธ์žฅํžˆ ์ž‘๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ 2๊ฐœ์˜ ๋ฒ„ํผ์— ๋Œ€ํ•ด ์ด๋ ‡๊ฒŒ ๊ทน๋‹จ์ ์œผ๋กœ ๋น„๋Œ€์นญ์ ์ธ ํฌ๊ธฐ๋ฅผ ํ• ๋‹นํ•œ ๋ฐ๋Š” ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒ€์ƒ‰์„ ๋ฉ”์ธ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฒ€์ƒ‰ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋–„๋Š” ๊ฒ€์ƒ‰ ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ˆ˜๋ฐฑ๋งŒ์—์„œ ์ˆ˜์ฒœ๋งŒ ๊ฑด์— ๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ๋Š” ๊ฐฑ์‹  ๋Œ€์ƒ์ด ๋งŽ์•„ ๋ดค์ž ํŠธ๋žœ์žญ์…˜๋งˆ๋‹ค ํ•œ ๊ฑด์—์„œ ์ˆ˜๋งŒ ๊ฑด ์ •๋„ ๋ฐ–์— ์•ˆ๋œ๋‹ค. (๋ฌผ๋ก  ํŠธ๋žœ์žญ์…˜ ๊ทœ๋ชจ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅผ ์ˆ˜ ๋Š” ์žˆ๋‹ค) ๋”ฐ๋ผ์„œ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ์— ๊ฐ’๋น„์‹ผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ์ž์ฃผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์‹ค์ œ๋กœ ๋งŽ์€ DBMS๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์—ฌ์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ ์บ์‹œ๋ฅผ ๋˜๋„๋ก ๋งŽ์ด ํ• ๋‹นํ•  ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ์ด ๊ฒ€์ƒ‰์— ๋น„ํ•ด ๊ฐฑ์‹ ์ด ๋งŽ๋‹ค๋ฉด, ์ดˆ๊ธฐ ์„ค์ •์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์„ฑ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋กœ๊ทธ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์ฃผ๋Š” ํŠœ๋‹(์ตœ์ ํ™”)์ด ๋‹น์—ฐํžˆ ํ•„์š”ํ•˜๋‹ค.

๊ฒ€์ƒ‰๊ณผ ๊ฐฑ์‹  ์ค‘์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ

์ตœ๊ทผ์˜ DBMS๋Š” ๊ฝค ๋ฐœ์ „ํ•ด์„œ, ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์Šค์Šค๋กœ ์กฐ์ •ํ•˜๋Š” DBMS๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋„ ํ•œ๊ณ„๋Š” ์žˆ๋‹ค. ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋ฐฐ๋ถ„์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ๋ชจ๋“  ๊ฒƒ์„ ์ž๋™ ์„ค์ •์— ์˜์ง€ํ•˜๋Š” ์ผ์€ ๊ต‰์žฅํžˆ ์œ„ํ—˜ํ•˜๋‹ค.

์ผ๋‹จ ๋กœ๊ทธ ๋ฒ„ํผ๊ฐ€ ํฌ๊ฒŒ ์žกํ˜€์žˆ๋‹ค๋ฉด, ๊ฐฑ์‹  ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋˜์–ด ํฐ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ ์บ์‹œ๊ฐ€ ํฌ๊ฒŒ ์žกํ˜€์žˆ๋‹ค๋ฉด ๊ฒ€์ƒ‰ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์‹ฌ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

6. ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ โ€˜์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌโ€™

์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

์ •๋ ฌ ๋˜๋Š” ํ•ด์‹œ ๊ด€๋ จ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ์ž‘์—…์šฉ ์˜์—ญ์œผ๋กœ ์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌ(working memory)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ •๋ ฌ์€ ORDER BY๊ตฌ, ์ง‘ํ•ฉ ์—ฐ์‚ฐ, ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹คํ–‰๋œ๋‹ค. ๋ฐ˜๋ฉด ํ•ด์‹œ๋Š” ์ฃผ๋กœ ํ…Œ์ด๋ธ” ๋“ฑ์˜ ๊ฒฐํ•ฉ์—์„œ ํ•ด์‹œ ๊ฒฐํ•ฉ์ด ์‚ฌ์šฉ๋˜๋Š” ๋•Œ ์‹คํ–‰๋˜๋ฉฐ ์ตœ๊ทผ์—๋Š” GROUP BY์—์„œ๋„ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด ์ž‘์—…์šฉ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ SQL์—์„œ ์ •๋ ฌ ๋˜๋Š” ํ•ด์‹œ๊ฐ€ ํ•„์š”ํ•œ ๋•Œ ์‚ฌ์šฉ๋˜๊ณ , ์ข…๋ฃŒ๋˜๋ฉด ํ•ด์ œ๋˜๋Š” ์ž„์‹œ ์˜์—ญ์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ์บ์‹œ์™€ ๋กœ๊ทธ ๋ฒ„ํผ์™€๋Š” ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด ์˜์—ญ์ด ์„ฑ๋Šฅ์ ์œผ๋กœ ์ค‘์š”ํ•œ ์ด์œ ๋Š”, ๋งŒ์•ฝ ์ด ์˜์—ญ์ด ๋‹ค๋ฃจ๋ ค๋Š” ๋ฐ์ดํ„ฐ์–‘๋ณด๋‹ค ์ž‘์•„ ๋ถ€์กฑํ•ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋Œ€๋ถ€๋ถ„์˜ DBMS๊ฐ€ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” OS ๋™์ž‘์—์„œ ๋งํ•˜๋Š” ์Šค์™‘๊ณผ ๊ฐ™์€๊ฒƒ์ด๋‹ค.

๋งŽ์€ DBMS๋Š” ์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ์ ์ธ ์˜์—ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  1. Oracle : ์ž„์‹œ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค (TEMP Tablespace)
  2. Microsoft SQL Server : TEMPDB
  3. PostgreSQL : ์ผ์‹œ ์˜์—ญ(pgsql_tmp)

์ด๋Ÿฌํ•œ ์ผ์‹œ ์˜์—ญ๋“ค์€ ์ €์žฅ์†Œ ์œ„์— ์žˆ์œผ๋ฏ€๋กœ ๋‹น์—ฐํžˆ ์ ‘๊ทผ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.

๋ถ€์กฑํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž‘๋™ํ•˜๊ณ  ์žˆ์„ ๋•Œ๋Š” ๋น ๋ฅด๊ฒŒ ์›€์ง์ด๋‹ค๊ฐ€, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋Š” ์ˆœ๊ฐ„ ๊ฐ‘์ž๊ธฐ ๋А๋ ค์ง€๋Š” ์ˆœ๊ฐ„์ ์ธ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๋‹ค.

๋˜ํ•œ ์ด ์˜์—ญ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL ๊ตฌ๋ฌธ๋“ค์ด ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ํ•˜๋‚˜์˜ SQL๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์„ ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ž˜ ๋“ค์–ด๊ฐ€์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL ๊ตฌ๋ฌธ์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋„˜์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์žฌํ˜„ํ•˜๋Š” ๊ฒ€์‚ฌ(๋ถ€ํ•˜ ๊ฒ€์‚ฌ)๋ฅผ ์‹ค์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์ด ์ผ์–ด๋‚ ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ํ•˜๋‚˜๊ฐ€ ์žˆ์„ ๋•Œ์˜ ์„ฑ์งˆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์„ ๋•Œ์˜ ์„ฑ์งˆ๋„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ปจํŠธ๋กค ํ•˜๊ธฐ ํž˜๋“  ์„ฑ๋Šฅ ๋ฌธ์ œ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ฅผ ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋ฉด DBMS๋Š” โ€˜๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋”๋ผ๋„ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ๊ณ„์† ๋…ธ๋ ฅํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ดโ€™๋ผ๊ณ  ์ƒ๊ฐํ• ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ด์œ ๋กœ SQL๊ตฌ๋ฌธ์— ์˜ค๋ฅ˜๋ฅผ ์ ˆ๋Œ€ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ๋น„๋ก ๋А๋ ค์ง€๋Š” ์‚ฌ์˜คํ•ญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ƒ๊ด€์—†์œผ๋‹ˆ ์–ด๋–ป๊ฒŒ๋“  ๋๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋ ค ๋…ธ๋ ฅํ•œ๋‹ค. ์ด๋Š” DBMS๊ฐ€ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ๋•Œ, ์šด์˜์ฒด์ œ ์ •๋„์˜ ๊ธ‰์œผ๋กœ ์ฒ˜๋ฆฌ ๊ณ„์†์„ฑ์„ ๋‹ด๋ณดํ•˜๋ ค ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

DBMS์™€ ์‹คํ–‰ ๊ณ„ํš

1. ๊ถŒํ•œ ์ด์–‘์˜ ์ฃ„์•…

C, ์ž๋ฐ”, ๋ฃจ๋น„์™€ ๊ฐ™์€ ์ ˆ์ฐจ๊ฐ€ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ์–ธ์–ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ(How)๋ฅผ ์ฑ…์ž„์ง€๊ณ  ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ์ด ์ „์ œ์ด๋‹ค. ๋ฐ˜๋ฉด ๋น„ ์ ˆ์ฐจ์ ์ธ RDB๋Š” ๊ทธ๋Ÿฌํ•œ ๋ชจ๋“  ์ผ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ์—๊ฒŒ ๋งก๊ฒผ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋Š” ์ผ์€ ๋Œ€์ƒ(What)์„ ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถ•์†Œ๋˜์—ˆ๋‹ค.

RDB๊ฐ€ ์ด๋ ‡๊ฒŒ ๋Œ€๋‹ดํ•˜๊ฒŒ ๊ถŒํ•œ ์ด์–‘์„ ๊ฐํ–‰ํ•œ ๋ฐ๋Š” ๋‹น์—ฐํžˆ ์ •๋‹นํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค. ๋ฐ”๋กœ โ€˜๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋น„์ฆˆ๋‹ˆ์Šค ์ „์ฒด์˜ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธโ€™์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ง์€ ๋ฐ˜์€ ๋งž๊ณ  ๋ฐ˜์€ ํ‹€๋ ธ๋‹ค. ๋งž๋‹ค๋Š” ๊ฒƒ์€ RDB๊ฐ€ ์‹œ์Šคํ…œ ์„ธ๊ณ„ ๊ณณ๊ณณ์— ์นจํˆฌํ•ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, ํ‹€๋ ธ๋‹ค๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๊ฐ€ RDB๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์›Œํ•œ๋‹ค๋Š” ์ ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. SQL์€ ์ดˆ๊ธฐ์— ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋˜ํ•œ How๋ฅผ ์˜์‹ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ๊ณ ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ฝค ์žˆ๋‹ค. RDB๊ฐ€ ์ˆจ๊ธฐ๊ณ  ์žˆ๋Š” ๋‚ด๋ถ€ ์ ˆ์ฐจ๋ฅผ ๋“ค์—ฌ๋‹ค๋ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์ด๋‹ค.

2. ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ• ๊นŒ?

RDB์—์„œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ ˆ์ฐจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ชจ๋“ˆ์€ ์ฟผ๋ฆฌ ํ‰๊ฐ€ ์—”์ง„์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ฟผ๋ฆฌ ํ‰๊ฐ€ ์—”์ง„์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ SQL๊ตฌ๋ฌธ(์ฟผ๋ฆฌ)์„ ์ฒ˜์Œ ์ฝ์–ด๋“ค์ด๋Š” ๋ชจ๋“ˆ์ด๊ธฐ๋„ ํ•œ๋‹ค. ์ฟผ๋ฆฌ ํ‰๊ฐ€ ๋ชจ๋“ˆ์€ ์ถ”๊ฐ€๋กœ ํŒŒ์„œ ๋˜๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €์˜ค ใ…๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ธŒ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

https://yongineer.duckdns.org/sql/044.png

ํŒŒ์„œ(parser)

ํŒŒ์„œ์˜ ์—ญํ• ์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํŒŒ์Šค(๊ตฌ๋ฌธ ๋ถ„์„)ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ SQL ๊ตฌ๋ฌธ์ด ํ•ญ์ƒ ๊ตฌ๋ฌธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๋‹ค๋Š” ๋ณด์ฆ์ด ์—†์œผ๋ฏ€๋กœ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ํŒŒ์„œ๋Š” SQL ๊ตฌ๋ฌธ์„ ์ •ํ˜•์ ์ธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ DBMS๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ํ›„์† ์ฒ˜๋ฆฌ๊ฐ€ ํšจ์œจํ™” ๋œ๋‹ค.

์˜ตํ‹ฐ๋งˆ์ด์ €(optimizer)

์„œ๋ฅ˜ ์‹ฌ์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ ์ฟผ๋ฆฌ๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๋กœ ์ „์†ก๋œ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” โ€˜์ตœ์ ํ™”โ€™์ด๋‹ค. ์ด๋•Œ ์ตœ์ ํ™”์˜ ๋Œ€์ƒ์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๋ฒ•(์‹คํ–‰ ๊ณ„ํš)์ด๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๋ฐ”๋กœ DBMS ๋‘๋‡Œ์˜ ํ•ต์‹ฌ์ด๋‹ค.

์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ธ๋ฑ์Šค ์œ ๋ฌด, ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ๋˜๋Š” ํŽธํ–ฅ ์ •๋„, DBMS๋‚ด๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์˜ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•ด์„œ, ์„ ํƒ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์‹คํ–‰ ๊ณ„ํš์„ ์ž‘์„ฑํ•˜๊ณ , ์ด๋“ค์˜ ๋น„์šฉ์„ ์—ฐ์‚ฐํ•˜๊ณ , ๊ฐ€์žฅ ๋‚ฎ์€ ๋น„์šฉ์„ ๊ฐ€์ง„ ์‹คํ–‰ ๊ณ„ํš์„ ์„ ํƒํ•œ๋‹ค.

์ ‘๊ทผ๋ฒ•์˜ ์ˆ˜๊ฐ€ ๋งŽ์ด ๋‚˜์˜จ๋‹ค๋ฉด ๊ทธ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. RDB๊ฐ€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์˜ ์ ˆ์ฐจ ์ง€ํ–ฅ ๊ฒฐ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” ์ด์œ ๋Š” ์ด๋Ÿฐ ๊ท€์ฐฎ์€ ์ผ์„ ๊ธฐ๊ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

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

์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ์„ธ์šธ ๋•Œ ์˜ตํ‹ฐ๋งˆ์ด์ €์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์นดํƒˆ๋กœ๊ทธ ๋งค๋‹ˆ์ €์ด๋‹ค. ์นดํƒˆ๋กœ๊ทธ๋ž€ DBMS์˜ ๋‚ด๋ถ€์ •๋ณด๋ฅผ ๋ชจ์•„๋†“์€ ํ…Œ์ด๋ธ”๋“ค๋กœ, ํ…Œ์ด๋ธ” ๋˜๋Š” ์ธ๋ฑ์Šค์˜ ํ†ต๊ณ„ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์นดํƒˆ๋กœ๊ทธ ์ •๋ณด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ โ€˜ํ†ต๊ณ„ ์ •๋ณดโ€™๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

ํ”Œ๋žœ ํ‰๊ฐ€(plan evaluation)

์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ SQL๊ตฌ๋ฌธ์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์„ธ์šด ๋’ค ๊ทธ๊ฒƒ์„ ๋ฐ›์•„ ์ตœ์ ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ”Œ๋žœ ํ‰๊ฐ€์ด๋‹ค. ์‹คํ–‰ ๊ณ„ํš์ด๋ผ๋Š” ๊ฒƒ์€ ๊ณง๋ฐ”๋กœ DBMS๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์ธ๊ฐ„์ด ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ์˜ โ€˜๊ณ„ํš์„œโ€™์ด๋‹ค. ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ SQL๊ตฌ๋ฌธ์ด ์žˆ์„ ๋•Œ ์‹คํ–‰ ๊ณ„ํš์„ ์ฝ๊ณ , ์ˆ˜์ • ๋ฐฉ์•ˆ๋“ฑ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์„ ํƒํ•˜๋ฉด, ์ดํ›„์— DBMS๋Š” ์‹คํ–‰ ๊ณ„ํš์„ ์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

3. ์˜ตํ‹ฐ๋งˆ์ด์ €์™€ ํ†ต๊ณ„ ์ •๋ณด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋กœ์„œ๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๋‹ค. ์ด์œ ๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๋ช…๋ นํ•˜๋Š” ๋Œ€๋กœ ๋‹ค ์ž˜ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŠนํžˆ ์นดํƒˆ๋กœ๊ทธ ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ†ต๊ณ„์ •๋ณด์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•ญ์ƒ ์‹ ๊ฒฝ ์จ์ค˜์•ผ ํ•œ๋‹ค.

ํ”Œ๋žœ ์„ ํƒ์„ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ๋งก๊ธฐ๋Š” ๊ฒฝ์šฐ, ์‹ค์ œ๋กœ ์ตœ์ ์˜ ํ”Œ๋žœ์ด ์„ ํƒ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ๋งŽ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํŒจํ•˜๋Š” ํŒจํ„ด์ด ๋ช‡๊ฐ€์ง€์ž‡๋Š”๋ฐ ํ†ต๊ณ„ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์›์ธ์œผ๋กœ ๊ผฝํžŒ๋‹ค.

์นดํƒˆ๋กœ๊ทธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ†ต๊ณ„ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด๋‹ค.

  • ๊ฐ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ์ˆ˜
  • ๊ฐ ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ ์ˆ˜์™€ ํ•„๋“œ์˜ ํฌ๊ธฐ
  • ํ•„๋“œ์˜ ์นด๋””๋„๋ฆฌํ‹ฐ
  • ํ•„๋“œ๊ฐ’์˜ ํžˆ์Šคํ† ๊ทธ๋žจ
  • ํ•„๋“œ ๋‚ด๋ถ€์— ์žˆ๋Š” NULL์ˆ˜
  • ์ธ๋ฑ์Šค ์ •๋ณด

์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์‹คํ–‰ ๊ณ„ํš์„ ๋งŒ๋“ ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๋Š” ์ด๋Ÿฌํ•œ ์นดํƒˆ๋กœ๊ทธ ์ •๋ณด๊ฐ€ ํ…Œ์ด๋ธ” ๋˜๋Š” ์ธ๋ฑ์Šค์˜ ์‹ค์ œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ์ด๋‹ค. ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/๊ฐฑ์‹ /์ œ๊ฑฐ๊ฐ€ ์ˆ˜ํ–‰๋  ๋•Œ ์นดํƒˆ๋กœ๊ทธ ์ •๋ณด๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์˜ค๋ž˜๋œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹คํ–‰ ๊ณ„ํš์„ ์„ธ์šฐ๊ฒŒ ๋œ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ๊ณผ๊ฑฐ ์ •๋ณด ๋ฐ–์— ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์–ด์ฉ” ์ˆ˜ ์—†์ด ์ž˜๋ชป๋œ ๊ณ„ํš์„ ์„ธ์šธ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

๊ทน๋‹จ์ ์ธ ์˜ˆ๋กœ, ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๋ฉด ์ผ๋‹จ ๋ ˆ์ฝ”๋“œ 0๊ฐœ์˜ ์ƒํƒœ๋กœ ์นดํƒˆ๋กœ๊ทธ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ดํ›„์— 1์–ต ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์นดํƒˆ๋กœ๊ทธ ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ๋ฐ์ดํ„ฐ 0๊ฐœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ”Œ๋žœ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์œผ๋กœ๋Š” ์ตœ์ ์˜ ํ”Œ๋žœ์„ ์ ˆ๋Œ€ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†๋‹ค.

4. ์ตœ์ ์˜ ์‹คํ–‰ ๊ณ„ํš์ด ์ž‘์„ฑ๋˜๊ฒŒ ํ•˜๋ ค๋ฉด

ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ๋ฐ”๋€Œ๋ฉด ์นดํƒˆ๋กœ๊ทธ์˜ ํ†ต๊ณ„ ์ •๋ณด๋„ ํ•จ๊ป˜ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง€๋‹ˆ์–ด์˜ ์ƒ์‹์ด๋‹ค. ํ†ต๊ณ„ ์ •๋ณด ๊ฐฑ์‹ ์€ ๋Œ€์ƒ ํ…Œ์ด๋ธ” ๋˜๋Š” ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ์™€ ์ˆ˜์— ๋”ฐ๋ผ์„œ ๋ช‡์‹ญ ๋ถ„์—์„œ ๋ช‡์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธฐ๋„ ํ•˜๋Š”, ์‹คํ–‰ ๋น„์šฉ์ด ๊ต‰์žฅํžˆ ๋†’์€ ์ž‘์—…์ด๋‹ค ํ•˜์ง€๋งŒ DBMS๊ฐ€ ์ตœ์ ์˜ ํ”Œ๋žœ์„ ์„ ํƒํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ์กฐ๊ฑด์ด๋ฏ€๋กœ ๊ฐฑ์‹  ์‹œ์ ์„ ํ™•์‹คํ•˜๊ฒŒ ๊ฒ€ํ† ํ•ด์•ผ ํ•œ๋‹ค.

//Oracle
exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => [์Šคํ‚ค๋งˆ์ด๋ฆ„], TABNAME => [ํ…Œ์ด๋ธ”์ด๋ฆ„]);

//SQL Server
UPDATE STATISTICS [ํ…Œ์ด๋ธ”์ด๋ฆ„]

//DB2
RUNSTATS ON TABLE [์Šคํ‚ค๋งˆ์ด๋ฆ„].[ํ…Œ์ด๋ธ”์ด๋ฆ„];

//PostgreSQL
ANALYZE [์Šคํ‚ค๋งˆ์ด๋ฆ„].[ํ…Œ์ด๋ธ”์ด๋ฆ„];

//MySQL
ANALYZE TABLE [์Šคํ‚ค๋งˆ์ด๋ฆ„].[ํ…Œ์ด๋ธ”์ด๋ฆ„];

์‹คํ–‰ ๊ณ„ํš์ด SQL ๊ตฌ๋ฌธ์˜ ์„ฑ๋Šฅ์„ ๊ฒฐ์ •

๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์€ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ SQL๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ˜์‘ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ์žˆ๋‹ค. ์ด๋ฏธ ์ตœ์ ์˜ ๊ฒฝ๋กœ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”๋ฐ๋„ ๋А๋ฆฐ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. SQL๊ตฌ๋ฌธ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ์˜ ์ ‘๊ทผ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

1. ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ ๋ฐฉ๋ฒ•

์ด๋Ÿฌํ•œ SQL ๊ตฌ๋ฌธ์˜ ์ง€์—ฐ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ œ์ผ ๋จผ์ € ์‹คํ–‰ ๊ณ„ํš์„ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค.

//Oracle
set autotrace traceonly

//SQL Server
SET SHOWPLAN_TEXT ON

//DB2
EXPLAIN ALL WITH SNAPSHOT FOR [SQL๊ตฌ๋ฌธ]

//PostgreSQL
EXPLAIN [SQL๊ตฌ๋ฌธ]

//MySQL
EXPLAIN [SQL๊ตฌ๋ฌธ]

๊ทธ๋Ÿผ ์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐœ์˜ ๊ธฐ๋ณธ์ ์€ SQL๊ตฌ๋ฌธ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

  1. ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”(Full Scan)์˜ ์‹คํ–‰ ๊ณ„ํš
  2. ์ธ๋ฑ์Šค ์Šค์บ”์˜ ์‹คํ–‰ ๊ณ„ํš
  3. ๊ฐ„๋‹จํ•œ ํ…Œ์ด๋ธ” ๊ฒฐํ•ฉ์˜ ์‹คํ–‰ ๊ณ„ํš

https://yongineer.duckdns.org/sql/047.png

https://yongineer.duckdns.org/sql/046.png

์‹คํ–‰ ๊ณ„ํš์˜ ์ถœ๋ ฅ ํฌ๋งท์ด ์™„์ „ํžˆ ๊ฐ™์ง€๋Š” ์•Š์ง€๋งŒ ๊ณตํ†ต์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

  1. ์กฐ์ž‘ ๋Œ€์ƒ์˜ ๊ฐ์ฒด
  2. ๊ฐ์ฒด์— ๋Œ€ํ•œ ์กฐ์ž‘์˜ ์ข…๋ฅ˜
  3. ์กฐ์ž‘ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜

์กฐ์ž‘ ๋Œ€์ƒ ๊ฐ์ฒด

PostgreSQL์€ on ๋’ค์—, Oracle์€ Nameํ•„๋“œ์—, MySQL์€ tableํ•„๋“œ์— ์กฐ์ž‘ ๋Œ€์ƒ ๊ฐ์ฒด (shops, products)๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” SQL ๊ตฌ๋ฌธ์—์„œ๋Š” ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋Š”์ง€ ํ˜ผ๋™ํ•˜์ง€ ์•Š๊ฒŒ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋˜ํ•œ ์ด ๋ถ€๋ถ„์€ ํ…Œ์ด๋ธ” ์ด์™ธ์—๋„ ์ธ๋ฑ์Šค, ํŒŒํ‹ฐ์…˜, ์‹œํ€ธ์Šค์ฒ˜๋Ÿผ SQL ๊ตฌ๋ฌธ์œผ๋กœ ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ผ๋ฉด ๋ฌด์—‡์ด๋ผ๋„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ์ฒด์— ๋Œ€ํ•œ ์กฐ์ž‘์˜ ์ข…๋ฅ˜

๊ฐ์ฒด์— ๋Œ€ํ•œ ์กฐ์ž‘์˜ ์ข…๋ฅ˜๋Š” ์‹คํ–‰ ๊ณ„ํš์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค. PostgreSQL์€ ๋ฌธ์žฅ์˜ ์•ž๋ถ€๋ถ„์— ๋‚˜์˜ค๋ฉฐ, Oracle์€ Operationํ•„๋“œ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉฐ MySQL์€ typeํ•„๋“œ์— ๋‚˜ํƒ€๋‚œ๋‹ค. PostgreSQL์˜ Seq Scan์€ ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ (Sequential Scan)์˜ ์ค„์ž„๋ง๋กœ โ€˜ํŒŒ์ผ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ์ฝ์–ด๋‚ธ๋‹คโ€™๋Š” ์˜๋ฏธ ์ด๋‹ค. Oracle์˜ TABLE ACCESS FULL์€ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋ถ€ ์ฝ์–ด ๋“ค์ด๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๐Ÿ’กMySQL์˜ typeํ•„๋“œ

์ ‘๊ทผ ๋ฐฉ์‹์„ค๋ช…
const๊ธฐ๋ณธ ํ‚ค ๋˜๋Š” ๊ณ ์œ ํ‚ค์— ์˜ํ•œ loockup(๋“ฑ๊ฐ€๋น„๊ต), ์กฐ์ธ์ด ์•„๋‹Œ ๊ฐ€์žฅ ์™ธ๋ถ€์˜ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผ ํ•˜๋Š” ๋ฐฉ์‹, ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ 1ํ–‰์ด๋‹ค. ๋‹จ ๊ธฐ๋ณธ ํ‚ค, ๊ณ ์œ  ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ const๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค
systemํ…Œ์ด๋ธ”์— 1ํ–‰๋ฐ–์— ์—†๋Š” ๊ฒฝ์šฐ์˜ ํŠน์ˆ˜ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹
ALL์ „์ฒด ํ–‰ ์Šค์บ”, ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์ „์ฒด์— ์žก๊ทผํ•œ๋‹ค.
index์ธ๋ฑ์Šค ์Šค์บ”, ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ธ๋ฑ์Šค์˜ ์ „์ฒด ์—”ํŠธ๋ฆฌ์— ์ ‘๊ทผํ•œ๋‹ค.
eq_ref์กฐ์ธ์ด ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”๋กœ ์ ‘๊ทผํ•  ๋•Œ ๊ธฐ๋ณธํ‚ค ๋˜๋Š” ๊ณต์œ  ํ‚ค์— ์˜ํ•œ lookup์ด ์ผ์–ด๋‚œ๋‹ค. const์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์กฐ์ธ์˜ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค
ref๊ณ ์œ  ํ‚ค๊ฐ€์•„๋‹Œ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ๋“ฑ๊ฐ€๋น„๊ต, ์—ฌ๋Ÿฌ ๊ฐœ ํ–‰์— ์ ‘๊ทผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
ref_or_nullref์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ๋ฑ์Šค ์ ‘๊ทผ ์‹œ ๋งจ ์•ž์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” NULL์˜ ์—”ํŠธ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
range์ธ๋ฑ์Šค ํŠน์ • ๋ฒ”์œ„์˜ ํ–‰์— ์ ‘๊ทผํ•œ๋‹ค
fulltextfulltext ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰
index_merge์—ฌ๋Ÿฌ ๊ฐœ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํ–‰์„ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ฉํ•œ๋‹ค.
unique_subqueryIN ์„œ๋ธŒ์ฟผ๋ฆฌ ์ ‘๊ทผ์—์„œ ๊ธฐ๋ณธ ํ‚ค ๋˜๋Š” ๊ณ ์œ  ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ฐฉ์‹์€ ์“ธ๋ฐ ์—†๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์—ฌ ์ƒ๋‹นํžˆ ๋น ๋ฅด๋‹ค.
index_subqueryunique_sunquery์™€ ๊ฑฐ์˜ ๋น„์Šทํ•˜์ง€๋งŒ ๊ณ ์œ ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹๋„ ์ƒ๋‹นํžˆ ๋น ๋ฅด๋‹ค

๐Ÿ’ก์‹คํ–‰ ๊ณ„ํš์˜ ์‹คํ–‰ ๋น„์šฉ๊ณผ ์‹คํ–‰ ์‹œ๊ฐ„

์‹คํ–‰ ๋น„์šฉ(Cost)์ด๋ผ๋Š” ์ง€ํ‘œ๋Š” ํ‰๊ฐ€ํ•˜๊ธฐ ์กฐ๊ธˆ ์–ด๋ ค์šด ํ•ญ๋ชฉ์ด๋‹ค. ์ด๋ฆ„๋งŒ ๋ณด๋ฉด ์ž‘์„ ์ˆ˜๋ก ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ ‡๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ์ ˆ๋Œ€ ํ‰๊ฐ€์˜ ์ง€ํ‘œ๋กœ ์“ฐ๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ๊ณค๋ž€ํ•˜๋‹ค.

๋˜ํ•œ Oracle์ด ์ถœ๋ ฅํ•˜๋Š” Timeํ•„๋“œ๋„ ์–ด๋””๊นŒ์ง€๋‚˜ ์ถ”์ •๋˜๋Š” ์‹คํ–‰ ์‹œ๊ฐ„์ด๋ฏ€๋กœ, ์ ˆ๋Œ€ ์ง€ํ‘œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ์‹คํ–‰ ๊ณ„ํš์— ์ถœ๋ ฅ๋˜๋Š” ๋น„์šฉ ๋˜๋Š” ์‹คํ–‰ ์‹œ๊ฐ„, ์ฒ˜๋ฆฌ ๋ ˆ์ฝ”๋“œ ์ˆ˜๋Š” ์ถ”์ •๊ฐ’์œผ๋กœ ์ ˆ๋Œ€ ์ง€ํ‘œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๋‹ค๋งŒ ๊ตฌํ˜„์— ๋”ฐ๋ผ์„œ๋Š” ์‹ค์ œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ค€๋น„ํ•œ DBMS๋„ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Oracle์—์„œ๋Š” SQL ๊ตฌ๋ฌธ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•(DBMS_XPLAN.DISPLAY_CURSOR)์ด ์žˆ๋Š”๋ฐ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ์ž‘๋งˆ๋‹ค ๊ฑธ๋ฆฐ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SQL๊ตฌ๋ฌธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์‹คํ–‰๊ณ„ํš์ด ๋‚˜์˜จ๋‹ค.

https://yongineer.duckdns.org/sql/048.png

๊ฐ๊ฐ์˜ ํ•„๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ์ด๋‹ค.

  • E-Rows : ์ถ”์ •๋˜๋Š” ์กฐ์ž‘ ๋ ˆ์ฝ”๋“œ ์ˆ˜
  • A-Rows : ์‹ค์ œ ์กฐ์ž‘ ๋ ˆ์ฝ”๋“œ ์ˆ˜
  • A-Time : ์‹ค์ œ ์‹คํ–‰ ์‹œ๊ฐ„

์กฐ์ž‘ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜

PostgreSQL, Oracle, MySQL๋ชจ๋‘ Rows๋ผ๋Š” ํ•ญ๋ชฉ์— ์ถœ๋ ฅ๋œ๋‹ค. ๊ฒฐํ•ฉ ๋˜๋Š” ์ง‘์•ฝ์ด ํฌํ•จ๋˜๋ฉด 1๊ฐœ์˜ SQL๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•ด๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์กฐ์ž‘์ด ์ˆ˜ํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ ์กฐ์ž‘์—์„œ ์–ผ๋งˆ๋งŒํผ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€๊ฐ€ SQL ๊ตฌ๋ฌธ ์ „์ฒด์˜ ์‹คํ–‰ ๋น„์šฉ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์ง€ํ‘œ๊ฐ€ ๋œ๋‹ค.

๋‹ค๋งŒ, ์ด ์ˆซ์ž์™€ ๊ด€๋ จํ•ด์„œ ์ž์ฃผ ์˜คํ•ด๋ฅผ ์‚ฌ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ ์ด ์ˆซ์ž๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ๋งŒ๋“ค ๋•Œ ์„ค๋ช…ํ–ˆ๋˜, ์นดํƒˆ๋กœ๊ทธ ๋งค๋‹ˆ์ €๋กœ๋ถ€ํ„ฐ ์–ป์€ ๊ฐ’์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ†ต๊ณ„ ์ •๋ณด์—์„œ ํŒŒ์•…ํ•œ ์ˆซ์ž์ด๋ฏ€๋กœ, ์‹ค์ œ SQL๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•œ ์‹œ์ ์˜ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ ์ˆ˜์™€ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Shops ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ , ์‹คํ–‰ ๊ณ„ํš์„ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋ชจ๋‘ ๊ทธ๋Œ€๋กœ 60์ด๋ผ๋Š” ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค. ์ด๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์–ด๋””๊นŒ์ง€๋‚˜ ํ†ต๊ณ„๋ผ๋Š” ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ํ…Œ์ด๋ธ”์„ ์ œ๋Œ€๋กœ ๋ณด์ง€ ์•Š๋Š”๋‹ค๋Š” ์ฆ๊ฑฐ์ด๋‹ค.

3. ์ธ๋ฑ์Šค ์Šค์บ”์˜ ์‹คํ–‰ ๊ณ„ํš

https://yongineer.duckdns.org/sql/049.png

https://yongineer.duckdns.org/sql/050.png

https://yongineer.duckdns.org/sql/051.png

์กฐ์ž‘ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜

์ผ๋‹จ ๋ชจ๋“  DBMS ๋ชจ๋‘ Rows๊ฐ€ 1๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. PostgreSQL๊ณผ Oracle์—์„  WHERE๊ตฌ์—์„œ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ โ€˜00050โ€™์ธ ์ ํฌ๋ฅผ ์ง€์ •ํ–ˆ์œผ๋ฉฐ MySQL์—์„œ๋Š” ์œ ์ผํ•œ ์ƒํ’ˆ์ธ โ€˜๋ฐ”๋””โ€™๋ฅผ ์ง€์ •ํ–ˆ์œผ๋ฏ€๋กœ ์ ‘๊ทผ ๋Œ€์ƒ์€ ๋ฐ˜๋“œ์‹œ ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ ‘๊ทผ ๋Œ€์ƒ ๊ฐ์ฒด์™€ ์กฐ์ž‘

PostgreSQL์—์„œ๋Š” Index Scan, Oracle์—์„œ๋Š” INDEX UNIQUE SCAN, MySQL์—์„œ๋Š” ref๋ผ๋Š” ์กฐ์ž‘์ด ๋‚˜ํƒ€๋‚œ๋‹ค. ์ด๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์Šค์บ”์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Oracle์—์„œ๋Š” TABLE ACCESS FULL์ด TABLE ACCESS BY INDEX ROWID๋กœ ๋ฐ”๋€Œ์—ˆ๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๋‚ด์—ญ์„ ๋ณด๋ฉด id=2์˜ ๋ ˆ์ฝ”๋“œ์— INDEX UNIQUE SCAN, name(๋Œ€์ƒ ๊ฐ์ฒด)์— PK_SHOPS๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ์ด PK_SHOPS๋Š” ๊ธฐ๋ณธ ํ‚ค์˜ ์ธ๋ฑ์Šค ์ด๋ฆ„์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์Šค์บ”ํ•˜๋Š” ๋ชจ์ง‘ํ•ฉ ๋ ˆ์ฝ”๋“œ ์ˆ˜์—์„œ ์„ ํƒ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ ์ ๋‹ค๋ฉด ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋Š” ํ’€ ์Šค์บ”์ด ๋ชจ์ง‘ํ•ฉ์˜ ๋ฐ์ดํ„ฐ์–‘์— ๋น„๋ก€ํ•ด์„œ ์ฒ˜๋ฆฌ ๋น„์šฉ์ด ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์— ๋ฐ˜ํ•ด, ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ™œ์šฉํ•˜๋Š” B-tree๊ฐ€ ๋ชจ์ง‘ํ•ฉ์˜ ๋ฐ์ดํ„ฐ์–‘์— ๋”ฐ๋ผ ๋Œ€์ˆ˜ ํ•จ์ˆ˜์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋น„์šฉ์ด ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ ์ธ๋ฑ์Šค์˜ ์ฒ˜๋ฆฌ ๋น„์šฉ์ด ์™„๋งŒํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๋œป์œผ๋กœ ํŠน์ • ๋ฐ์ดํ„ฐ์–‘(N)์„ ์†์ต ๋ถ„๊ธฐ์ ์œผ๋กœ ์ธ๋ฑ์Šค ์Šค์บ”์ด ํ’€ ์Šค์บ”๋ณด๋‹ค๋„ ํšจ์œจ์ ์ธ ์ ‘๊ทผ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

https://yongineer.duckdns.org/sql/052.png

4. ๊ฐ„๋‹จํ•œ ํ…Œ์ด๋ธ” ๊ฒฐํ•ฉ์˜ ์‹คํ–‰ ๊ณ„ํš

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

์ผ๋ฐ˜์ ์œผ๋กœ DBMS๊ฐ€ ๊ฒฐํ•ฉ์„ ํ•  ๋•Œ๋Š” ์„ธ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Nested Loops์ด๋‹ค. ํ•œ์ชฝ ํ…Œ์ด๋ธ”์„ ์ฝ์œผ๋ฉด์„œ ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜๋งˆ๋‹ค ๊ฒฐํ•ฉ ์กฐ๊ฑด์— ๋งž๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ ˆ์ฐจ ์ง€ํ–ฅํ˜• ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด, ์ด์ค‘ ๋ฐ˜๋ณต์œผ๋กœ ๊ตฌํ˜„๋˜๋ฏ€๋กœ ์ค‘์ฒฉ ๋ฐ˜๋ณต(Nested Loops)์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ๊ฒƒ์ด๋‹ค.

๋‘๋ฒˆ์งธ๋Š” Sort Merge์ด๋‹ค. ๊ฒฐํ•ฉ ํ‚ค๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ฒฐํ•ฉ ์ „์— ์ „์ฒ˜๋ฆฌ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋•Œ ์ž‘์—…์šฉ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์„ธ๋ฒˆ์งธ๋Š” Hash์ด๋‹ค. ๊ฒฐํ•ฉ ํ‚ค๋ฅผ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งตํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฏ€๋กœ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž‘์—…์šฉ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

https://yongineer.duckdns.org/sql/053.png

https://yongineer.duckdns.org/sql/054.png

Oracle์˜ Operationํ•„๋“œ๋ฅผ ๋ณด๋ฉด NESTED LOOPS๋ผ๊ณ  ๋‚˜์˜ค๋ฏ€๋กœ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ PostgreSQL์—์„œ๋„ Nested Loop์ด๋ผ๊ณ  ๋‚˜์˜ค๋ฉฐ MySQL์—์„œ๋Š” Extraํ•„๋“œ์— Using join buffer (hash join)์ด๋ผ๊ณ  ๋‚˜์˜ค๋Š” ๊ฑธ๋กœ ๋ณด์•„ Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์‹คํ–‰ ๊ณ„ํš์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค ์ด๋•Œ ์ค‘์ฐน ๋‹จ๊ณ„๊ฐ€ ๊นŠ์„ ์ˆ˜๋ก ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. PostgreSQL์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ๋กœ ์‚ดํŽด๋ณด๋ฉด Nested Loop๋ณด๋‹ค๋„ Seq Scan๊ณผ Index Scan์˜ ๋‹จ๊ณ„๊ฐ€ ๊นŠ์œผ๋ฏ€๋กœ ๊ฒฐํ•ฉ ์ „์— ํ…Œ์ด๋ธ” ์ ‘๊ทผ์ด ๋จผ์ € ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๊ฒฐํ•ฉ์˜ ๊ฒฝ์šฐ ์–ด๋–ค ํ…Œ์ด๋ธ”์— ๋จผ์ € ์ ‘๊ทผํ•˜๋Š”์ง€๊ฐ€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋ฐ ๊ฐ™์€ ์ค‘์ฒฉ ๋‹จ๊ณ„์—์„œ๋Š” ์œ„์—์„œ ์•„๋ž˜๋กœ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ PostgreSQL๊ณผ Oracle ๋ชจ๋‘ Reservationํ…Œ์ด๋ธ”๊ณผ Shopํ…Œ์ด๋ธ” ์ ‘๊ทผ์ด ๊ฐ™์€ ์ค‘์ฒฉ ๋‹จ๊ณ„์— ์žˆ์ง€๋งŒ Reservation ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ์œ„์— ์žˆ์œผ๋ฏ€๋กœ Reservationํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๋จผ์ € ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (MySQL์€ ์žฌ๊ณ ์ˆ˜ ํ…Œ์ด๋ธ”์— ๋จผ์ € ์ ‘๊ทผํ•œ๋‹ค.)

๐Ÿ’ก์ด๋•Œ ๋จผ์ € ์ ‘๊ทผํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ๊ตฌ๋™ ํ…Œ์ด๋ธ” (Driving table)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์‹คํ–‰ ๊ณ„ํš์˜ ์ค‘์š”์„ฑ

์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ข‹์„ ๊ฒƒ์œผ๋กœ ์—ฌ๊ฒจ ์„ ํƒํ•œ ์‹คํ–‰ ๊ณ„ํš์ด ์ฐธ๋‹ดํ•œ ์„ฑ๋Šฅ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค ๋˜ํ•œ ๊ทธ๋Ÿฌํ•œ ๋ณต์žกํ•œ ๋ฌธ์ œ ์ด์ „์— ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์ •๋ณด๋ฅผ ์ œ๋Œ€๋กœ ์ฃผ์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋นจ๋ผ์ง€๋Š” ๋ถ€๋ถ„์ธ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜. ํ…Œ์ด๋ธ” ๊ฒฐํ•ฉ ์ˆœ์„œ๋ฅผ ์ด์ƒํ•˜๊ฒŒ ์ ๋Š” ์‹ค์ˆ˜๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์ตœํ›„์˜ ํŠœ๋‹ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ”๋กœ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ Oracle, MySQL๋“ฑ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํžŒํŠธ ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SQL ๊ตฌ๋ฌธ์—์„œ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ๊ฐ•์ œ์ ์œผ๋กœ ๋ช…๋ นํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์–ด๋–ค ์„ ํƒ์ง€๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์„ ํƒ์ง€๋“ค์ด ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์ „์— SQL ๊ตฌ๋ฌธ๊ณผ ๊ทธ๋Ÿฌํ•œ SQL๊ตฌ๋ฌธ๋“ค์ด ์–ด๋– ํ•œ ์ ‘๊ทผ ๊ฒฝ๋กœ(Access path)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”์ง€ ์•„๋Š”์ง€๊ฐ€ ๋จผ์ €์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ๋Œ€๋กœ ๋œ SQL ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ์–ด๋–ค ํ…Œ์ด๋ธ” ์„ค์ •์ด ํšจ์œจ์ ์ธ์ง€ ์•Œ์•„์•ผ ํ•˜๋ฉฐ, ์–ด๋–ค SQL ๊ตฌ๋ฌธ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์–ด๋– ํ•œ ์‹คํ–‰ ๊ณ„ํš์ด ๋‚˜์˜ฌ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜๋„ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ •๋ฆฌ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‹ค์–‘ํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์˜ ๊ท ํ˜•์„ ์žก์œผ๋ ค๋Š” ๋ฏธ๋“ค์›จ์–ด
  • ํŠนํžˆ ์„ฑ๋Šฅ์ ์ธ ๊ด€์ ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์†์˜ ์ €์žฅ์†Œ(๋””์Šคํฌ)์™€ ๊ณ ์†์˜ ๋ฉ”๋ชจ๋ฆฌ ์ค‘์— ์–ด๋””์— ์œ„์น˜์‹œํ‚ฌ์ง€์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์ค‘์š”
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฐฑ์‹ ๋ณด๋‹ค๋„ ๊ฒ€์ƒ‰๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์— ๋น„์ค‘์„ ๋‘๋„๋ก ๊ธฐ๋ณธ ์„ค์ •๋˜์–ด ์žˆ์ง€๋งŒ, ์‹ค์ œ ์‹œ์Šคํ…œ์—์„œ๋„ ๊ทธ๋Ÿด์ง€๋Š” ํŒ๋‹จ์ด ํ•„์š”
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” SQL์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ ˆ์ฐจ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ์ž ์‹คํ–‰ ๊ณ„ํš์„ ๋งŒ๋“ฆ
  • ์‚ฌ์‹ค ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ์ฝ๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ด์ƒ์„ ์–ด๊ธฐ๋Š” ์ผ์ด์ง€๋งŒ, ์„ธ์ƒ ๋ชจ๋“  ๊ฒƒ์ด ์ด์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€์ง€๋Š” ์•Š์Œ

Yongineer
Written by@Yongineer
Backend Developer

GitHubInstagram