๊ณ ๊ธ ์ธ๋ฑ์ค ์ ๋ต์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ์ต๊ณ ๋ก ๋์ด์ฌ๋ฆฌ์ธ์. ์ฟผ๋ฆฌ ์ต์ ํ, ์ธ๋ฑ์ค ์ ํ ์ดํด, ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ต์ ํ: ๊ธ๋ก๋ฒ ์ฑ๋ฅ์ ์ํ ์ธ๋ฑ์ค ์ ๋ต ๋ง์คํฐํ๊ธฐ
์ค๋๋ ๊ณผ ๊ฐ์ด ์ํธ ์ฐ๊ฒฐ๋ ๋์งํธ ํ๊ฒฝ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฌ ๋๋ฅ๊ณผ ์๊ฐ๋์ ๊ฑธ์ณ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ์จ์ฑ์ด ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์ฑ๋ฅ์ด ๋๋ฆฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํดํ๊ณ , ์์ต ์์ค๋ก ์ด์ด์ง๋ฉฐ, ๋น์ฆ๋์ค ์ด์์ ์ฌ๊ฐํ๊ฒ ๋ฐฉํดํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ์๋ ์ฌ๋ฌ ์ธก๋ฉด์ด ์์ง๋ง, ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ด๊ณ ์ํฅ๋ ฅ ์๋ ์ ๋ต ์ค ํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ฅผ ์ง๋ฅ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋๋ ํจ๊ณผ์ ์ธ ์ธ๋ฑ์ค ์ ๋ต์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์ฌ๋ ์๊ฒ ๋ค๋ฃน๋๋ค. ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ธ์ง ํ์ํ๊ณ , ๋ค์ํ ์ ํ์ ๋ถ์ํ๋ฉฐ, ์ ๋ต์ ์ ์ฉ์ ๋ํด ๋ ผ์ํ๊ณ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค๋ช ํ๊ณ , ์ผ๋ฐ์ ์ธ ํจ์ ์ ๊ฐ์กฐํ ๊ฒ์ ๋๋ค. ์ด ๋ชจ๋ ๊ณผ์ ์์ ๊ธ๋ก๋ฒ ๊ด์ ์ ์ ์งํ์ฌ ํด์ธ ๋ ์์ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ฒฝ์ ๋ํ ๊ด๋ จ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
๋ณด์ด์ง ์๋ ๋ณ๋ชฉ ํ์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ด ์ ์ธ๊ณ์ ์ผ๋ก ์ค์ํ ์ด์
๊ธ๋ก๋ฒ ์ธ์ผ ์ด๋ฒคํธ ์ค์ธ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์์ํด ๋ณด์ธ์. ์ฌ๋ฌ ๊ตญ๊ฐ์ ์์ฒ, ์ด์ฉ๋ฉด ์๋ฐฑ๋ง ๋ช ์ ์ฌ์ฉ์๊ฐ ๋์์ ์ ํ์ ๊ฒ์ํ๊ณ , ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ๋ด๊ณ , ๊ฒฐ์ ๋ฅผ ์๋ฃํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ ์์ ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ ์ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ก ๋ณํ๋ฉ๋๋ค. ์ด๋ฌํ ์ฟผ๋ฆฌ๊ฐ ๋นํจ์จ์ ์ด๋ฉด ์์คํ ์ ๋น ๋ฅด๊ฒ ๊ณผ๋ถํ ์ํ๊ฐ ๋์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค:
- ๋๋ฆฐ ์๋ต ์๊ฐ: ์ฌ์ฉ์๋ ๋ต๋ตํ ์ง์ฐ์ ๊ฒฝํํ๊ณ ์ดํ๋ก ์ด์ด์ง๋๋ค.
- ๋ฆฌ์์ค ๊ณ ๊ฐ: ์๋ฒ๊ฐ ๊ณผ๋ํ CPU, ๋ฉ๋ชจ๋ฆฌ, I/O๋ฅผ ์๋ชจํ์ฌ ์ธํ๋ผ ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์ด์ ์ค๋จ: ๋ฐฐ์น ์์ , ๋ณด๊ณ ๋ฐ ๋ถ์ ์ฟผ๋ฆฌ๊ฐ ์ค๋จ๋ ์ ์์ต๋๋ค.
- ๋ถ์ ์ ์ธ ๋น์ฆ๋์ค ์ํฅ: ๋งค์ถ ์์ค, ๊ณ ๊ฐ ๋ถ๋ง, ๋ธ๋๋ ํํ ์์.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ ๋ฌด์์ธ๊ฐ? ๊ธฐ๋ณธ์ ์ดํด
ํต์ฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๊ฒ์ ์์ ์๋๋ฅผ ํฅ์์ํค๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ๋ ์ ์ผ๋ก ์ฑ ๋ค์ ์๋ ์์ธ๊ณผ ์ ์ฌํฉ๋๋ค. ํน์ ์ฃผ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ชจ๋ ํ์ด์ง๋ฅผ ์ค์บํ๋ ๋์ , ํด๋น ์ฃผ์ ๊ฐ ๋ ผ์๋ ํ์ด์ง ๋ฒํธ๋ฅผ ์ ๊ณตํ๋ ์์ธ์ ์ฐธ์กฐํ์ฌ ๊ด๋ จ ๋ด์ฉ์ผ๋ก ๋ฐ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์์ฒญ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ์ข ์ข "ํ ์ด๋ธ ์ ์ฒด ์ค์บ(full table scan)"์ ์ํํด์ผ ํฉ๋๋ค. ์ด๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด๊ณผ ์ผ์นํ๋ ํ์ ์ฐพ์ ๋๊น์ง ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ํ๋์ฉ ์ฝ๋๋ค๋ ์๋ฏธ์ ๋๋ค. ๋์ฉ๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ์ด๋ ์์ฒญ๋๊ฒ ๋๋ฆฌ๊ณ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์๋ชจํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ํ๋ ์ด์์ ์ ํ๋ ์ด์์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ ๋ณต์ฌ๋ณธ์ ์ ์ฅํ๋ฉฐ, ์๋ณธ ํ ์ด๋ธ์ ํด๋น ํ์ ๋ํ ํฌ์ธํฐ๋ ํจ๊ป ์ ์ฅํฉ๋๋ค. ์ธ๋ฑ์ฑ๋ ์ด์ ๋ํด ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ ํ์ ์ ์ํ๊ฒ ์ฐพ์ ํ ์ด๋ธ ์ ์ฒด ์ค์บ์ ํ์์ฑ์ ํผํ ์ ์์ต๋๋ค.
ํธ๋ ์ด๋์คํ: ์๋ ๋ ์ค๋ฒํค๋
์ธ๋ฑ์ค๋ ์ฝ๊ธฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค์ง๋ง, ๋น์ฉ์ด ์๋ ๊ฒ์ ์๋๋๋ค:
- ์ ์ฅ ๊ณต๊ฐ: ์ธ๋ฑ์ค๋ ์ถ๊ฐ์ ์ธ ๋์คํฌ ๊ณต๊ฐ์ ์๋นํฉ๋๋ค. ๋งค์ฐ ํฐ ํ ์ด๋ธ์ ๋ง์ ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ ์๋นํ ์ ์์ต๋๋ค.
- ์ฐ๊ธฐ ์ค๋ฒํค๋: ์ธ๋ฑ์ฑ๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ , ์ ๋ฐ์ดํธ ๋๋ ์ญ์ ๋ ๋๋ง๋ค ํด๋น ์ธ๋ฑ์ค๋ ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ์ฐ๊ธฐ ์์ ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ์ฌ `INSERT`, `UPDATE`, `DELETE` ์ฟผ๋ฆฌ์ ์๋๋ฅผ ์ ํ์ํฌ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์: ์ธ๋ฑ์ค๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์กฐ๊ฐํ๋์ด ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ฌ๊ตฌ์ถ์ด๋ ์ฌ๊ตฌ์ฑ ๊ฐ์ ์ฃผ๊ธฐ์ ์ธ ์ ์ง๋ณด์๊ฐ ํ์ํ๋ฉฐ, ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์ํด ํต๊ณ ์ ๋ณด๋ฅผ ์ต์ ์ํ๋ก ์ ์งํด์ผ ํฉ๋๋ค.
ํต์ฌ ์ธ๋ฑ์ค ์ ํ ์ค๋ช
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ ๋ค์ํ ์๋๋ฆฌ์ค์ ์ต์ ํ๋ ์ฌ๋ฌ ์ ํ์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ์ดํดํ๋ ๊ฒ์ ์ ๋ต์ ์ธ ์ธ๋ฑ์ค ๋ฐฐ์น๋ฅผ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค.
1. ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค
ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ฐ์ดํฐ ํ ์์ฒด๊ฐ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค์ ์์๋๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ์ ๋จ ํ๋์ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ง ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ ๋จ์ด๊ฐ ์ํ๋ฒณ์์ผ๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋ ์ฌ์ ๊ณผ ๊ฐ์ต๋๋ค. ๋จ์ด๋ฅผ ์ฐพ์ ๋ ๊ทธ ๋จ์ด์ ๋ฌผ๋ฆฌ์ ์์น๋ก ๋ฐ๋ก ๊ฐ๋๋ค.
- ์๋ ๋ฐฉ์: ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ๋ฒจ์๋ ํ ์ด๋ธ์ ์ค์ ๋ฐ์ดํฐ ํ์ด ํฌํจ๋ฉ๋๋ค.
- ์ฅ์ : ๋ฒ์ ๊ธฐ๋ฐ ์ฟผ๋ฆฌ(์: "1์๊ณผ 3์ ์ฌ์ด์ ๋ชจ๋ ์ฃผ๋ฌธ")์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐ ๋งค์ฐ ๋น ๋ฅด๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋์ด ๋์คํฌ์ ์ธ์ ํด ์์ผ๋ฏ๋ก ์ฌ๋ฌ ํ์ ๊ฒ์ํ๋ ์ฟผ๋ฆฌ์ ๋งค์ฐ ํจ์จ์ ์ ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ์ผ๋ฐ์ ์ผ๋ก ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค์ ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ ํค๋ ๊ณ ์ ํ๋ฉฐ `WHERE` ๋ฐ `JOIN` ์ ์์ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ ์ ์ฒด ๊ฒฐ๊ณผ ์งํฉ์ ์ ๋ ฌํด์ผ ํ๋ `ORDER BY` ์ ์ ์ฌ์ฉ๋๋ ์ด์๋ ์ด์์ ์ ๋๋ค.
- ๊ณ ๋ ค ์ฌํญ: ์ฌ๋ฐ๋ฅธ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ ์ฅ์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค ํค๊ฐ ์์ฃผ ์ ๋ฐ์ดํธ๋๋ฉด ํ์ด์ง ๋ถํ ๋ฐ ์กฐ๊ฐํ๋ฅผ ์ ๋ฐํ์ฌ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
2. ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค
๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ ์ธ๋ฑ์ฑ๋ ์ด๊ณผ ์ค์ ๋ฐ์ดํฐ ํ์ ๋ํ ํฌ์ธํฐ๋ฅผ ํฌํจํ๋ ๋ณ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ฑ ์ ์ ํต์ ์ธ ์์ธ๊ณผ ๊ฐ์ด ์๊ฐํ ์ ์์ต๋๋ค. ์ฉ์ด์ ํ์ด์ง ๋ฒํธ๋ฅผ ๋์ดํ์ง๋ง ์ค์ ๋ด์ฉ(ํ์ด์ง)์ ๋ค๋ฅธ ๊ณณ์ ์์ต๋๋ค. ํ ์ด๋ธ์ ์ฌ๋ฌ ๊ฐ์ ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์๋ ๋ฐฉ์: ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ๋ฒจ์๋ ์ธ๋ฑ์ฑ๋ ํค ๊ฐ๊ณผ ํ ๋ก์ผ์ดํฐ(๋ฌผ๋ฆฌ์ ํ ID ๋๋ ํด๋น ๋ฐ์ดํฐ ํ์ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค ํค)๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ฅ์ : `WHERE` ์ ์ด ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค ํค ์ด์ธ์ ์ด์ ์ฌ์ฉํ๋ `SELECT` ๋ฌธ์ ์๋๋ฅผ ๋์ด๋ ๋ฐ ์ข์ต๋๋ค. ๊ธฐ๋ณธ ํค ์ด์ธ์ ์ด์ ๋ํ ๊ณ ์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํฉ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ์์ฃผ ๊ฒ์๋๋ ์ด, ์ธ๋ ํค ์ด(์กฐ์ธ ์๋ ํฅ์), `GROUP BY` ์ ์ ์ฌ์ฉ๋๋ ์ด.
- ๊ณ ๋ ค ์ฌํญ: ๊ฐ ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ ์ฐ๊ธฐ ์์ ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ๊ณ ๋์คํฌ ๊ณต๊ฐ์ ์๋นํฉ๋๋ค. ์ฟผ๋ฆฌ๊ฐ ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๋, ์ธ๋ฑ์ค์ ํฌํจ๋์ง ์์ ๋ค๋ฅธ ์ด์ ๊ฒ์ํ๊ธฐ ์ํด ์ข ์ข "๋ถ๋งํฌ ์กฐํ(bookmark lookup)" ๋๋ "ํค ์กฐํ(key lookup)"๋ฅผ ์ํํ๋ฉฐ, ์ด๋ ์ถ๊ฐ์ ์ธ I/O ์์ ์ ์๋ฐํ ์ ์์ต๋๋ค.
3. B-ํธ๋ฆฌ ์ธ๋ฑ์ค (B+-Tree)
B-ํธ๋ฆฌ(ํนํ B+-ํธ๋ฆฌ)๋ SQL Server, MySQL(InnoDB), PostgreSQL, Oracle ๋ฑ ํ๋ RDBMS์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ธ๋ฑ์ค ๊ตฌ์กฐ์ ๋๋ค. ํด๋ฌ์คํฐํ ๋ฐ ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค ๋ชจ๋ ์ข ์ข B-ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์๋ ๋ฐฉ์: ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ๊ฒ์, ์์ฐจ ์ ๊ทผ, ์ฝ์ ๋ฐ ์ญ์ ๋ฅผ ๋ก๊ทธ ์๊ฐ ๋ด์ ํ์ฉํ๋ ์๊ฐ ๊ท ํ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋งค์ฐ ๋๋ฆฌ๊ฒ ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ๊ตฌ์กฐ: ๋ฃจํธ ๋ ธ๋, ๋ด๋ถ ๋ ธ๋, ๋ฆฌํ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํฐ๋ ๋ฆฌํ ๋ ธ๋์ ์ ์ฅ๋๋ฉฐ, ๋ฆฌํ ๋ ธ๋๋ค์ ํจ์จ์ ์ธ ๋ฒ์ ์ค์บ์ ์ํด ์๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
- ์ฅ์ : ๋ฒ์ ์ฟผ๋ฆฌ(์: `WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31'`), ๋ฑ๊ฐ ์กฐํ(`WHERE customer_id = 123`), ์ ๋ ฌ์ ํ์ํฉ๋๋ค.
- ์ ์ฉ ๊ฐ๋ฅ์ฑ: ๋ค์ฌ๋ค๋ฅํจ ๋๋ถ์ ๋๋ถ๋ถ์ ์ธ๋ฑ์ฑ ์๊ตฌ์ ๋ํ ๊ธฐ๋ณธ ์ ํ์ ๋๋ค.
4. ํด์ ์ธ๋ฑ์ค
ํด์ ์ธ๋ฑ์ค๋ ํด์ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ธ๋ฑ์ค ํค์ ํด์์ ๋ฐ์ดํฐ์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. B-ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ์ ๋ ฌ๋์ด ์์ง ์์ต๋๋ค.
- ์๋ ๋ฐฉ์: ๊ฐ์ ๊ฒ์ํ ๋ ์์คํ ์ ๊ฐ์ ํด์ํ๊ณ ํฌ์ธํฐ๊ฐ ์ ์ฅ๋ ์์น๋ก ์ง์ ์ด๋ํฉ๋๋ค.
- ์ฅ์ : ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ฑ๊ฐ ์กฐํ(`WHERE user_email = 'john.doe@example.com'`)์ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
- ์ ํ ์ฌํญ: ๋ฒ์ ์ฟผ๋ฆฌ, `ORDER BY` ์ ๋๋ ๋ถ๋ถ ํค ๊ฒ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ์ ์ฒ๋ฆฌ๋์ง ์์ผ๋ฉด ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์๋ "ํด์ ์ถฉ๋(hash collision)"์ ์ทจ์ฝํฉ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ๋ฑ๊ฐ ๊ฒ์๋ง ์ํ๋๋ ๊ณ ์ ํ๊ฑฐ๋ ๊ฑฐ์ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง ์ด์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ์ผ๋ถ RDBMS(MySQL์ MEMORY ์คํ ๋ฆฌ์ง ์์ง ๋๋ ํน์ PostgreSQL ํ์ฅ ๊ธฐ๋ฅ ๋ฑ)๋ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ์ง๋ง, ์ ํ ์ฌํญ ๋๋ฌธ์ B-ํธ๋ฆฌ๋ณด๋ค ๋ฒ์ฉ ์ธ๋ฑ์ฑ์ ํจ์ฌ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
5. ๋นํธ๋งต ์ธ๋ฑ์ค
๋นํธ๋งต ์ธ๋ฑ์ค๋ ํธ๋์ญ์ ์์คํ (OLTP)๋ณด๋ค๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ง ํ๊ฒฝ(OLAP)์์ ์์ฃผ ๋ฐ๊ฒฌ๋๋ ํน์ ์ธ๋ฑ์ค์ ๋๋ค. '์ฑ๋ณ', '์ํ'(์: 'ํ์ฑ', '๋นํ์ฑ') ๋๋ '์ง์ญ'๊ณผ ๊ฐ์ด ๋ฎ์ ์นด๋๋๋ฆฌํฐ(๊ณ ์ ๊ฐ์ด ์ ์)๋ฅผ ๊ฐ์ง ์ด์ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค.
- ์๋ ๋ฐฉ์: ์ธ๋ฑ์ฑ๋ ์ด์ ๊ฐ ๊ณ ์ ๊ฐ์ ๋ํด ๋นํธ๋งต(0๊ณผ 1์ ๋นํธ ๋ฌธ์์ด)์ด ์์ฑ๋ฉ๋๋ค. ๊ฐ ๋นํธ๋ ํ ์ด๋ธ์ ํ์ ํด๋นํ๋ฉฐ, '1'์ ํด๋น ํ์ด ํน์ ๊ฐ์ ๊ฐ์ง๊ณ ์์์ ๋ํ๋ด๊ณ '0'์ ๊ทธ๋ ์ง ์์์ ๋ํ๋ ๋๋ค. ์ฌ๋ฌ ๋ฎ์ ์นด๋๋๋ฆฌํฐ ์ด์ ๋ํ `AND` ๋๋ `OR` ์กฐ๊ฑด์ ํฌํจํ๋ ์ฟผ๋ฆฌ๋ ์ด๋ฌํ ๋นํธ๋งต์ ๋ํด ๋นํธ ์ฐ์ฐ์ ์ํํ์ฌ ๋งค์ฐ ์ ์ํ๊ฒ ํด๊ฒฐ๋ ์ ์์ต๋๋ค.
- ์ฅ์ : ๋ฎ์ ์นด๋๋๋ฆฌํฐ ๋ฐ์ดํฐ์ ๋ํด ๋งค์ฐ ์์ถ์ ์ ๋๋ค. ์ฌ๋ฌ ์กฐ๊ฑด์ ๊ฒฐํฉํ๋ ๋ณต์กํ `WHERE` ์ (`WHERE status = 'Active' AND region = 'Europe'`)์ ๋งค์ฐ ํจ์จ์ ์ ๋๋ค.
- ์ ํ ์ฌํญ: ๋์ ์นด๋๋๋ฆฌํฐ ์ด์๋ ์ ํฉํ์ง ์์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ํฐ ๋นํธ๋งต์ ์์ ํด์ผ ํ๋ฏ๋ก ๋ฝ(locking) ๋ฌธ์ ๋ฅผ ์ ๋ฐํ์ฌ ๋์์ฑ์ด ๋์ OLTP ํ๊ฒฝ์์๋ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค, ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์์ฌ ๊ฒฐ์ ์ง์ ์์คํ (์: Oracle, ์ผ๋ถ PostgreSQL ํ์ฅ ๊ธฐ๋ฅ).
6. ํน์ ์ธ๋ฑ์ค ์ ํ
ํต์ฌ ์ ํ ์ธ์๋ ์ฌ๋ฌ ํน์ ์ธ๋ฑ์ค๊ฐ ๋ง์ถคํ ์ต์ ํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค:
-
๋ณตํฉ ์ธ๋ฑ์ค(Composite/Compound Indexes):
- ์ ์: ํ ์ด๋ธ์ ๋ ๊ฐ ์ด์์ ์ด์ ์์ฑ๋ ์ธ๋ฑ์ค์ ๋๋ค.
- ์๋ ๋ฐฉ์: ์ธ๋ฑ์ค ํญ๋ชฉ์ ์ฒซ ๋ฒ์งธ ์ด, ๊ทธ ๋ค์ ๋ ๋ฒ์งธ ์ด ์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
- ์ฅ์ : ์ด ์กฐํฉ์ผ๋ก ํํฐ๋งํ๊ฑฐ๋ ์ธ๋ฑ์ค์ ๊ฐ์ฅ ์ผ์ชฝ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ์ฟผ๋ฆฌ์ ํจ์จ์ ์ ๋๋ค. ์ฌ๊ธฐ์ "์ผ์ชฝ ์ต์ฅ ์ ๋์ฌ ๊ท์น(leftmost prefix rule)"์ด ์ค์ํฉ๋๋ค. (A, B, C)์ ๋ํ ์ธ๋ฑ์ค๋ (A), (A, B) ๋๋ (A, B, C)์ ๋ํ ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋ ์ ์์ง๋ง, (B, C) ๋๋ (C) ๋จ๋ ์ผ๋ก๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒ์ ์กฐํฉ, ์: ๊ณ ๊ฐ ์กฐํ๋ฅผ ์ํ `(last_name, first_name)`์ ๋ํ ์ธ๋ฑ์ค. ์ฟผ๋ฆฌ์ ํ์ํ ๋ชจ๋ ์ด์ด ์ธ๋ฑ์ค์ ์๋ ๊ฒฝ์ฐ "์ปค๋ฒ๋ง ์ธ๋ฑ์ค" ์ญํ ์ ํ ์๋ ์์ต๋๋ค.
-
๊ณ ์ ์ธ๋ฑ์ค(Unique Indexes):
- ์ ์: ์ธ๋ฑ์ฑ๋ ์ด์ ๊ณ ์ ์ฑ์ ๊ฐ์ ํ๋ ์ธ๋ฑ์ค์ ๋๋ค. ์ค๋ณต๋ ๊ฐ์ ์ฝ์ ํ๋ ค๊ณ ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์๋ ๋ฐฉ์: ์ผ๋ฐ์ ์ผ๋ก ์ถ๊ฐ์ ์ธ ๊ณ ์ ์ฑ ์ ์ฝ ์กฐ๊ฑด ๊ฒ์ฌ๊ฐ ์๋ B-ํธ๋ฆฌ ์ธ๋ฑ์ค์ ๋๋ค.
- ์ฅ์ : ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฒซ ๋ฒ์งธ ์ผ์น ํญ๋ชฉ์ ์ฐพ์ ํ ๊ฒ์์ ์ค๋จํ ์ ์์์ ์๊ธฐ ๋๋ฌธ์ ์กฐํ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: `PRIMARY KEY` ๋ฐ `UNIQUE` ์ ์ฝ ์กฐ๊ฑด์ ๋ํด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๋ฐ์ดํฐ ํ์ง ์ ์ง์ ํ์์ ์ ๋๋ค.
-
ํํฐ๋ง๋/๋ถ๋ถ ์ธ๋ฑ์ค(Filtered/Partial Indexes):
- ์ ์: `WHERE` ์ ์ ์ํด ์ ์๋, ํ ์ด๋ธ์ ํ ํ์ ์งํฉ๋ง ํฌํจํ๋ ์ธ๋ฑ์ค์ ๋๋ค.
- ์๋ ๋ฐฉ์: ํํฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ง ์ธ๋ฑ์ค์ ํฌํจ๋ฉ๋๋ค.
- ์ฅ์ : ํนํ ํ์ ์์ ๋น์จ๋ง ์์ฃผ ์ฟผ๋ฆฌ๋๋ ๋๊ท๋ชจ ํ ์ด๋ธ(์: `WHERE status = 'Active'`)์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํฌ๊ธฐ์ ์ ์ง ๊ด๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: SQL Server ๋ฐ PostgreSQL์์ ํน์ ๋ฐ์ดํฐ ํ์ ์งํฉ์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
-
์ ์ฒด ํ
์คํธ ์ธ๋ฑ์ค(Full-Text Indexes):
- ์ ์: ํฐ ํ ์คํธ ๋ธ๋ก ๋ด์์ ํจ์จ์ ์ธ ํค์๋ ๊ฒ์์ ์ํด ์ค๊ณ๋ ํน์ ์ธ๋ฑ์ค์ ๋๋ค.
- ์๋ ๋ฐฉ์: ํ ์คํธ๋ฅผ ๋จ์ด๋ก ๋ถํดํ๊ณ , ์ผ๋ฐ์ ์ธ ๋จ์ด(๋ถ์ฉ์ด)๋ฅผ ๋ฌด์ํ๋ฉฐ, ์ธ์ด์ ์ผ์น๋ฅผ ํ์ฉํฉ๋๋ค(์: "run"์ ๊ฒ์ํ๋ฉด "running", "ran"๋ ์ฐพ์).
- ์ฅ์ : ํ ์คํธ ๊ฒ์์์ `LIKE '%text%'`๋ณด๋ค ํจ์ฌ ์ฐ์ํฉ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ๊ฒ์ ์์ง, ๋ฌธ์ ๊ด๋ฆฌ ์์คํ , ์ฝํ ์ธ ํ๋ซํผ.
์ธ์ , ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ: ์ ๋ต์ ๋ฐฐ์น
์ธ๋ฑ์ค ์์ฑ ๊ฒฐ์ ์ ์์์ ์ด์ง ์์ต๋๋ค. ์ฟผ๋ฆฌ ํจํด, ๋ฐ์ดํฐ ํน์ฑ ๋ฐ ์์คํ ์ํฌ๋ก๋๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
1. ์ฝ๊ธฐ ๋ ์ฐ๊ธฐ ๋น์จ์ด ๋์ ํ ์ด๋ธ
์ธ๋ฑ์ค๋ ์ฃผ๋ก ์ฝ๊ธฐ ์์ (`SELECT`)์ ์ ์ฉํฉ๋๋ค. ํ ์ด๋ธ์ด `INSERT`, `UPDATE` ๋๋ `DELETE` ์์ ๋ณด๋ค `SELECT` ์ฟผ๋ฆฌ๋ฅผ ํจ์ฌ ๋ ๋ง์ด ๊ฒฝํํ๋ค๋ฉด ์ธ๋ฑ์ฑ์ ๊ฐ๋ ฅํ ํ๋ณด์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์ `Products` ํ ์ด๋ธ์ ์์์ด ์ฝํ์ง๋ง ์๋์ ์ผ๋ก ๋๋ฌผ๊ฒ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
2. `WHERE` ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ด
๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ด์ ์ธ๋ฑ์ค์ ์ฃผ์ ํ๋ณด์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ์ฒด ํ ์ด๋ธ์ ์ค์บํ์ง ์๊ณ ๋ ๊ฒฐ๊ณผ ์งํฉ์ ์ ์ํ๊ฒ ์ขํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ก๋ `user_id`, `product_category`, `order_status` ๋๋ `country_code`๊ฐ ์์ต๋๋ค.
3. `JOIN` ์กฐ๊ฑด์ ์ด
ํจ์จ์ ์ธ ์กฐ์ธ์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๊ฑธ์น ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. `JOIN` ๋ฌธ์ `ON` ์ ์ ์ฌ์ฉ๋๋ ์ด(ํนํ ์ธ๋ ํค)์ ์ธ๋ฑ์ฑํ๋ฉด ํ ์ด๋ธ ๊ฐ์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ํ๋ก์ธ์ค์ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, `customer_id`๋ฅผ ๊ธฐ์ค์ผ๋ก `Orders`์ `Customers` ํ ์ด๋ธ์ ์กฐ์ธํ๋ ๊ฒฝ์ฐ ๋ ํ ์ด๋ธ ๋ชจ๋์ `customer_id`์ ๋ํ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ํฐ ์ด์ ์ด ์์ต๋๋ค.
4. `ORDER BY` ๋ฐ `GROUP BY` ์ ์ ์ด
๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ(`ORDER BY`)ํ๊ฑฐ๋ ์ง๊ณ(`GROUP BY`)ํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ์ ๋ ฌ ์์ ์ ์ํํด์ผ ํ ์ ์์ต๋๋ค. ๊ด๋ จ ์ด์ ๋ํ ์ธ๋ฑ์ค, ํนํ ์ ์ ์ด ์์์ ์ผ์นํ๋ ๋ณตํฉ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ฏธ ์ํ๋ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๊ฒ ํ์ฌ ๋ช ์์ ์ธ ์ ๋ ฌ์ ํ์์ฑ์ ์์จ ์ ์์ต๋๋ค.
5. ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ด
์นด๋๋๋ฆฌํฐ๋ ํ ์์ ๋ํ ์ด์ ๊ณ ์ ๊ฐ ์๋ฅผ ๋ํ๋ ๋๋ค. ์ธ๋ฑ์ค๋ `email_address`, `customer_id` ๋๋ `unique_product_code`์ ๊ฐ์ด ์นด๋๋๋ฆฌํฐ๊ฐ ๋์(๊ณ ์ ๊ฐ์ด ๋ง์) ์ด์์ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค. ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค๋ ๊ฒ์ ์ธ๋ฑ์ค๊ฐ ๊ฒ์ ๊ณต๊ฐ์ ๋ช ๊ฐ์ ํน์ ํ์ผ๋ก ์ ์ํ๊ฒ ์ขํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋๋ก, ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ์ด(์: `gender`, `is_active`)์ ๋จ๋ ์ผ๋ก ์ธ๋ฑ์ฑํ๋ ๊ฒ์ ์ข ์ข ๋ ํจ๊ณผ์ ์ ๋๋ค. ์๋ํ๋ฉด ์ธ๋ฑ์ค๊ฐ ์ฌ์ ํ ํ ์ด๋ธ ํ์ ๋ง์ ๋น์จ์ ๊ฐ๋ฆฌํฌ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, ์ด๋ฌํ ์ด์ ์นด๋๋๋ฆฌํฐ๊ฐ ๋ ๋์ ์ด๊ณผ ํจ๊ป ๋ณตํฉ ์ธ๋ฑ์ค์ ์ผ๋ถ๋ก ํฌํจํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
6. ์ธ๋ ํค
์ผ๋ถ ORM์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ํด ์๋ฌต์ ์ผ๋ก ์ธ๋ฑ์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ์ธ๋ ํค ์ด์ ๋ช ์์ ์ผ๋ก ์ธ๋ฑ์ฑํ๋ ๊ฒ์ ๋๋ฆฌ ์ฑํ๋ ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค. ์ด๋ ์กฐ์ธ ์ฑ๋ฅ ํฅ์๋ฟ๋ง ์๋๋ผ ๋ถ๋ชจ ํ ์ด๋ธ์ ๋ํ `INSERT`, `UPDATE`, `DELETE` ์์ ์ค ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ ์๋๋ฅผ ๋์ด๊ธฐ ์ํจ์ ๋๋ค.
7. ์ปค๋ฒ๋ง ์ธ๋ฑ์ค
์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ ํน์ ์ฟผ๋ฆฌ์ ํ์ํ ๋ชจ๋ ์ด์ ์ ์์ ํฌํจํ๋ ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค์ ๋๋ค(ํค ์ด ๋๋ SQL Server์ `INCLUDE` ์ด ๋๋ MySQL์ `STORING` ์ด๋ก). ์ฟผ๋ฆฌ๊ฐ ํ ์ด๋ธ์ ์ค์ ๋ฐ์ดํฐ ํ์ ์ ๊ทผํ ํ์ ์์ด ์ธ๋ฑ์ค ์์ฒด๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก ์์ ํ ๋ง์กฑ๋ ์ ์์ ๋, ์ด๋ฅผ "์ธ๋ฑ์ค ์ ์ฉ ์ค์บ(index-only scan)" ๋๋ "์ปค๋ฒ๋ง ์ธ๋ฑ์ค ์ค์บ(covering index scan)"์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ๋์คํฌ ์ฝ๊ธฐ๊ฐ ๋ ์์ ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ก ์ ํ๋๋ฏ๋ก I/O ์์ ์ ๊ทน์ ์ผ๋ก ์ค์ ๋๋ค.
์๋ฅผ ๋ค์ด, `SELECT customer_name, customer_email FROM Customers WHERE customer_id = 123;` ์ฟผ๋ฆฌ๋ฅผ ์์ฃผ ์คํํ๊ณ `customer_id`์ `customer_name`๊ณผ `customer_email`์ *ํฌํจ*ํ๋ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฃผ `Customers` ํ ์ด๋ธ์ ์ ํ ๊ฑด๋๋ฆด ํ์๊ฐ ์์ต๋๋ค.
์ธ๋ฑ์ค ์ ๋ต ๋ชจ๋ฒ ์ฌ๋ก: ์ด๋ก ์์ ๊ตฌํ๊น์ง
ํจ๊ณผ์ ์ธ ์ธ๋ฑ์ค ์ ๋ต์ ๊ตฌํํ๋ ค๋ฉด ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ธ์ง ์๋ ๊ฒ ์ด์์ด ํ์ํฉ๋๋ค. ๋ถ์, ๋ฐฐํฌ ๋ฐ ์ง์์ ์ธ ์ ์ง ๊ด๋ฆฌ์ ๋ํ ์ฒด๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์๊ตฌ๋ฉ๋๋ค.
1. ์ํฌ๋ก๋ ์ดํด: OLTP ๋ OLAP
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฌ๋ก๋๋ฅผ ๋ถ๋ฅํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ฌ๋ฌ ์ง์ญ์ ๊ฑธ์ณ ๋ค์ํ ์ฌ์ฉ ํจํด์ ๊ฐ์ง ์ ์๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ํด๋น๋ฉ๋๋ค.
- OLTP (Online Transaction Processing): ๋ง์ ์์ ์๊ณ ์์์ ์ธ ํธ๋์ญ์ (์ฝ์ , ์ ๋ฐ์ดํธ, ์ญ์ , ๋จ์ผ ํ ์กฐํ)์ด ํน์ง์ ๋๋ค. ์: ์ ์์๊ฑฐ๋ ๊ฒฐ์ , ์ํ ๊ฑฐ๋, ์ฌ์ฉ์ ๋ก๊ทธ์ธ. OLTP์ ๊ฒฝ์ฐ, ์ธ๋ฑ์ฑ์ ์ฝ๊ธฐ ์ฑ๋ฅ๊ณผ ์ต์ํ์ ์ฐ๊ธฐ ์ค๋ฒํค๋ ์ฌ์ด์ ๊ท ํ์ ๋ง์ถฐ์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ํค, ์ธ๋ ํค ๋ฐ ์์ฃผ ์ฟผ๋ฆฌ๋๋ ์ด์ ๋ํ B-ํธ๋ฆฌ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
- OLAP (Online Analytical Processing): ๋ณด๊ณ ๋ฐ ๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค๋ฅผ ์ํด ๋ง์ ํ ์ด๋ธ์ ๊ฑธ์น ์ง๊ณ ๋ฐ ์กฐ์ธ์ ํฌํจํ๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๋ํ ๋ณต์กํ๊ณ ์ฅ๊ธฐ ์คํ๋๋ ์ฟผ๋ฆฌ๊ฐ ํน์ง์ ๋๋ค. ์: ์๋ณ ํ๋งค ๋ณด๊ณ ์, ์ถ์ธ ๋ถ์, ๋ฐ์ดํฐ ๋ง์ด๋. OLAP์ ๊ฒฝ์ฐ, ๋นํธ๋งต ์ธ๋ฑ์ค(์ง์๋๊ณ ์ ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ), ๊ณ ๋๋ก ๋น์ ๊ทํ๋ ํ ์ด๋ธ ๋ฐ ๋๊ท๋ชจ ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ์ผ๋ฐ์ ์ ๋๋ค. ์ฐ๊ธฐ ์ฑ๋ฅ์ ๋ ์ค์ํฉ๋๋ค.
๋ง์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ , ํนํ ๊ธ๋ก๋ฒ ๊ณ ๊ฐ์ ๋์์ผ๋ก ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ด๋ธ๋ฆฌ๋ ํํ์ด๋ฏ๋ก ํธ๋์ญ์ ์๋์ ๋ถ์์ ํต์ฐฐ๋ ฅ ๋ชจ๋๋ฅผ ๋ง์กฑ์ํค๋ ์ ์คํ ์ธ๋ฑ์ฑ์ด ํ์ํฉ๋๋ค.
2. ์ฟผ๋ฆฌ ๊ณํ ๋ถ์ (EXPLAIN/ANALYZE)
์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ดํดํ๊ณ ์ต์ ํํ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋๊ตฌ๋ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ๋๋ค(MySQL/PostgreSQL์์๋ `EXPLAIN`, SQL Server/Oracle์์๋ `SET SHOWPLAN_ALL ON` / `EXPLAIN PLAN`์ ํตํด ์ ๊ทผ). ์ด ๊ณํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ด ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์คํํ ๊ฒ์ธ์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค: ์ด๋ค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง, ํ ์ด๋ธ ์ ์ฒด ์ค์บ, ์ ๋ ฌ ๋๋ ์์ ํ ์ด๋ธ ์์ฑ์ ์ํํ๋์ง ์ฌ๋ถ ๋ฑ์ ๋๋ค.
์ฟผ๋ฆฌ ๊ณํ์์ ์ฐพ์์ผ ํ ๊ฒ:
- ํ ์ด๋ธ ์ค์บ(Table Scans): ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ชจ๋ ํ์ ์ฝ๊ณ ์๋ค๋ ํ์์ ๋๋ค. ์ข ์ข ์ธ๋ฑ์ค๊ฐ ์๊ฑฐ๋ ์ฌ์ฉ๋์ง ์๋๋ค๋ ์ ํธ์ ๋๋ค.
- ์ธ๋ฑ์ค ์ค์บ(Index Scans): ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ธ๋ฑ์ค์ ์๋น ๋ถ๋ถ์ ์ฝ๊ณ ์์ต๋๋ค. ํ ์ด๋ธ ์ค์บ๋ณด๋ค๋ ๋ซ์ง๋ง, ๋๋ก๋ "์ธ๋ฑ์ค ํ์(Index Seek)"์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ธ๋ฑ์ค ํ์(Index Seeks): ๊ฐ์ฅ ํจ์จ์ ์ธ ์ธ๋ฑ์ค ์์ ์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ํ์ผ๋ก ์ง์ ์ด๋ํฉ๋๋ค. ์ด๊ฒ์ด ์ฌ๋ฌ๋ถ์ด ๋ชฉํ๋ก ํด์ผ ํ๋ ๊ฒ์ ๋๋ค.
- ์ ๋ ฌ ์์ (Sort Operations): ์ฟผ๋ฆฌ ๊ณํ์ ๋ช ์์ ์ธ ์ ๋ ฌ ์์ (์: MySQL์ `Using filesort`, SQL Server์ `Sort` ์ฐ์ฐ์)์ด ํ์๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ฒ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ ๋ ฌํ๊ณ ์์์ ์๋ฏธํฉ๋๋ค. `ORDER BY` ๋๋ `GROUP BY` ์ ๊ณผ ์ผ์นํ๋ ์ธ๋ฑ์ค๋ ์ข ์ข ์ด๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ์์ ํ ์ด๋ธ(Temporary Tables): ์์ ํ ์ด๋ธ ์์ฑ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ผ๋ฉฐ, ๋ ๋์ ์ธ๋ฑ์ฑ์ผ๋ก ์ต์ ํ๋ ์ ์๋ ๋ณต์กํ ์์ ์ ๋ํ๋ ๋๋ค.
3. ๊ณผ๋ํ ์ธ๋ฑ์ฑ ํผํ๊ธฐ
์ธ๋ฑ์ค๋ ์ฝ๊ธฐ ์๋๋ฅผ ๋์ด์ง๋ง, ๊ฐ ์ธ๋ฑ์ค๋ ์ฐ๊ธฐ ์์ (`INSERT`, `UPDATE`, `DELETE`)์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ๊ณ ๋์คํฌ ๊ณต๊ฐ์ ์๋นํฉ๋๋ค. ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค:
- ์ฐ๊ธฐ ์ฑ๋ฅ ์ ํ: ์ธ๋ฑ์ฑ๋ ์ด์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ์ ๊ด๋ จ๋ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
- ์ ์ฅ ๊ณต๊ฐ ์๊ตฌ ์ฌํญ ์ฆ๊ฐ: ๋ ๋ง์ ์ธ๋ฑ์ค๋ ๋ ๋ง์ ๋์คํฌ ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค.
- ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ ํผ๋: ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ์ด ์ต์ ์ ๊ณํ์ ์ ํํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์ด ๋๋ก๋ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์์ฃผ ์คํ๋๊ณ ์ํฅ๋ ฅ์ด ํฐ ์ฟผ๋ฆฌ์ ๋ํด ์ฑ๋ฅ์ด ๋ช ๋ฐฑํ ํฅ์๋๋ ๊ฒฝ์ฐ์๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๋ฐ ์ง์คํ์ธ์. ์ข์ ๊ฒฝํ ๋ฒ์น์ ๊ฑฐ์ ๋๋ ์ ํ ์ฟผ๋ฆฌ๋์ง ์๋ ์ด์ ์ธ๋ฑ์ฑํ์ง ์๋ ๊ฒ์ ๋๋ค.
4. ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ฒฐํ๊ณ ๊ด๋ จ์ฑ ์๊ฒ ์ ์งํ๊ธฐ
์ธ๋ฑ์ค์ ํ์ํ ์ด๋ง ํฌํจํ์ธ์. ๋ ์ข์ ์ธ๋ฑ์ค(๋ ์ ์ ์ด)๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ๋น ๋ฅด๊ณ ์ ์ฅ ๊ณต๊ฐ์ ๋ ์๋นํฉ๋๋ค. ๊ทธ๋ฌ๋ ํน์ ์ฟผ๋ฆฌ์ ๋ํ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค์ ํ์ ๊ธฐ์ตํ์ธ์. ์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ฑ๋ ์ด๊ณผ ํจ๊ป ์ถ๊ฐ ์ด์ ์์ฃผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ, RDBMS๊ฐ ์ง์ํ๋ค๋ฉด ํด๋น ์ด์ ๋นํด๋ฌ์คํฐํ ์ธ๋ฑ์ค์ `INCLUDE`(๋๋ `STORING`) ์ด๋ก ํฌํจํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
5. ๋ณตํฉ ์ธ๋ฑ์ค์์ ์ฌ๋ฐ๋ฅธ ์ด๊ณผ ์์ ์ ํํ๊ธฐ
- ์นด๋๋๋ฆฌํฐ: ๋จ์ผ ์ด ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ, ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ด์ ์ฐ์ ์์๋ก ๋์ธ์.
- ์ฌ์ฉ ๋น๋: `WHERE`, `JOIN`, `ORDER BY` ๋๋ `GROUP BY` ์ ์์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์ด์ ์ธ๋ฑ์ฑํ์ธ์.
- ๋ฐ์ดํฐ ์ ํ: ์ ์ ์ ํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๋๋ ๋ํ ๊ฐ์ฒด ์ ํ๋ณด๋ค ์ธ๋ฑ์ฑํ๊ณ ๊ฒ์ํ๊ธฐ๊ฐ ๋ ๋น ๋ฆ ๋๋ค.
- ๋ณตํฉ ์ธ๋ฑ์ค์ ์ผ์ชฝ ์ต์ฅ ์ ๋์ฌ ๊ท์น: ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋(์: `(A, B, C)`), ๊ฐ์ฅ ์ ํ๋๊ฐ ๋๊ฑฐ๋ `WHERE` ์ ์์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์ด์ ๋จผ์ ๋ฐฐ์นํ์ธ์. ์ด๋ฅผ ํตํด ์ธ๋ฑ์ค๋ `A`, `A`์ `B`, ๋๋ `A`, `B`, `C`๋ฅผ ํํฐ๋งํ๋ ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. `B` ๋๋ `C`๋ง ํํฐ๋งํ๋ ์ฟผ๋ฆฌ์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
6. ์ธ๋ฑ์ค๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ์งํ๊ณ ํต๊ณ ์ ๋ฐ์ดํธํ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋, ํนํ ํธ๋์ญ์ ์ด ๋ง์ ํ๊ฒฝ์์๋ ์ฝ์ , ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ๋ก ์ธํด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์กฐ๊ฐํ๋ ์ ์์ต๋๋ค. ์กฐ๊ฐํ๋ ์ธ๋ฑ์ค์ ๋ ผ๋ฆฌ์ ์์๊ฐ ๋์คํฌ์์ ๋ฌผ๋ฆฌ์ ์์์ ์ผ์นํ์ง ์์ ๋นํจ์จ์ ์ธ I/O ์์ ์ ์ ๋ฐํจ์ ์๋ฏธํฉ๋๋ค.
- ์ฌ๊ตฌ์ถ(Rebuild) ๋ ์ฌ๊ตฌ์ฑ(Reorganize):
- ์ฌ๊ตฌ์ถ: ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์์ฑํ์ฌ ์กฐ๊ฐํ๋ฅผ ์ ๊ฑฐํ๊ณ ํต๊ณ๋ฅผ ๋ค์ ๋ง๋ญ๋๋ค. ์ด๋ ๋ ์ํฅ์ด ํฌ๋ฉฐ RDBMS ๋ฐ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค์ดํ์์ด ํ์ํ ์ ์์ต๋๋ค.
- ์ฌ๊ตฌ์ฑ: ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ๋ฒจ์ ์กฐ๊ฐ ๋ชจ์ํฉ๋๋ค. ์ด๋ ์จ๋ผ์ธ ์์ (๋ค์ดํ์ ์์)์ด์ง๋ง ์ฌ๊ตฌ์ถ๋ณด๋ค ์กฐ๊ฐํ ์ ๊ฑฐ ํจ๊ณผ๊ฐ ์ ์ต๋๋ค.
- ํต๊ณ ์ ๋ฐ์ดํธ: ์ด๊ฒ์ ์๋ง๋ ์ธ๋ฑ์ค ์กฐ๊ฐ ๋ชจ์๋ณด๋ค ๋ ์ค์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ๋ํ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด ํ ์ด๋ธ ๋ฐ ์ธ๋ฑ์ค ๋ด ๋ฐ์ดํฐ ๋ถํฌ์ ๋ํ ์ ํํ ํต๊ณ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ค๋๋ ํต๊ณ๋ ์๋ฒฝํ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋๋ผ๋ ์ต์ ํ ํ๋ก๊ทธ๋จ์ด ์ฐจ์ ์ ๊ณํ์ ์ ํํ๊ฒ ํ ์ ์์ต๋๋ค. ํต๊ณ๋ ํนํ ์๋นํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ์ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค.
7. ์ง์์ ์ผ๋ก ์ฑ๋ฅ ๋ชจ๋ํฐ๋งํ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ๋ ์ผํ์ฑ ์์ ์ด ์๋ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ์ฟผ๋ฆฌ ์ฑ๋ฅ, ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ (CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ I/O) ๋ฐ ์ธ๋ฑ์ค ์ฌ์ฉ๋์ ์ถ์ ํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ๊ตฌํํ์ธ์. ๊ธฐ์ค์ ์ ์ค์ ํ๊ณ ํธ์ฐจ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์ค์ ํ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ ํ๊ฑฐ๋, ์ฌ์ฉ์ ๊ธฐ๋ฐ์ด ์ฆ๊ฐํ๊ฑฐ๋, ๋ฐ์ดํฐ ํจํด์ด ๋ฐ๋์ ๋ฐ๋ผ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
8. ํ์ค์ ์ธ ๋ฐ์ดํฐ์ ์ํฌ๋ก๋๋ก ํ ์คํธํ๊ธฐ
์ฒ ์ ํ ํ ์คํธ ์์ด ํ๋ก๋์ ํ๊ฒฝ์ ์ง์ ์ค์ํ ์ธ๋ฑ์ฑ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌํํด์๋ ์ ๋ฉ๋๋ค. ํ๋ก๋์ ๊ณผ ์ ์ฌํ ๋ฐ์ดํฐ ๋ณผ๋ฅจ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ํฌ๋ก๋์ ํ์ค์ ์ธ ํํ์ ๊ฐ์ถ ํ ์คํธ ํ๊ฒฝ์ ๋ง๋์ธ์. ๋ถํ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ฌ์ฉ์๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ธ๋ฑ์ฑ ๋ณ๊ฒฝ์ด ๋ค์ํ ์ฟผ๋ฆฌ์ ๋ฏธ์น๋ ์ํฅ์ ์ธก์ ํ์ธ์.
์ผ๋ฐ์ ์ธ ์ธ๋ฑ์ฑ ํจ์ ๊ณผ ์ด๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ
๊ฒฝํ ๋ง์ ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์์กฐ์ฐจ๋ ์ธ๋ฑ์ฑ๊ณผ ๊ด๋ จํ์ฌ ์ผ๋ฐ์ ์ธ ํจ์ ์ ๋น ์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ์ธ์งํ๋ ๊ฒ์ด ํํผ์ ์ฒซ ๊ฑธ์์ ๋๋ค.
1. ๋ชจ๋ ๊ฒ์ ์ธ๋ฑ์ฑํ๊ธฐ
ํจ์ : "๋ ๋ง์ ์ธ๋ฑ์ค๊ฐ ํญ์ ๋ ์ข๋ค"๋ ์๋ชป๋ ๋ฏฟ์. ๋ชจ๋ ์ด์ ์ธ๋ฑ์ฑํ๊ฑฐ๋ ๋จ์ผ ํ ์ด๋ธ์ ์๋ง์ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ. ์ ๋์๊ฐ: ๋ ผ์ํ ๋ฐ์ ๊ฐ์ด, ์ด๋ ์ฐ๊ธฐ ์ค๋ฒํค๋๋ฅผ ํฌ๊ฒ ์ฆ๊ฐ์ํค๊ณ , DML ์์ ์ ๋๋ฆฌ๊ฒ ํ๋ฉฐ, ๊ณผ๋ํ ์ ์ฅ ๊ณต๊ฐ์ ์๋นํ๊ณ , ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ํผ๋์ค๋ฝ๊ฒ ํ ์ ์์ต๋๋ค. ํด๊ฒฐ์ฑ : ์ ํ์ ์ผ๋ก ํ์ธ์. ํ์ํ ๊ฒ๋ง ์ธ๋ฑ์ฑํ๊ณ , `WHERE`, `JOIN`, `ORDER BY`, `GROUP BY` ์ ์์ ์์ฃผ ์ฟผ๋ฆฌ๋๋ ์ด, ํนํ ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ด์ ์ง์คํ์ธ์.
2. ์ฐ๊ธฐ ์ฑ๋ฅ ๋ฌด์ํ๊ธฐ
ํจ์ : `INSERT`, `UPDATE`, `DELETE` ์์ ์ ๋ฏธ์น๋ ์ํฅ์ ๋ฌด์ํ๊ณ `SELECT` ์ฟผ๋ฆฌ ์ฑ๋ฅ์๋ง ์ง์คํ๋ ๊ฒ. ์ ๋์๊ฐ: ์ ํ ์กฐํ๋ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅด์ง๋ง ์ฃผ๋ฌธ ์ฝ์ ์ด ๋นํ์ฒ๋ผ ๋๋ฆฐ ์ ์์๊ฑฐ๋ ์์คํ ์ ๊ณง ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ํด๊ฒฐ์ฑ : ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ํ DML ์์ ์ ์ฑ๋ฅ์ ์ธก์ ํ์ธ์. ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ฉ๋ฉํ ์ ์์ ์ ๋๋ก ์ ํ๋๋ฉด ์ธ๋ฑ์ค ์ ๋ต์ ์ฌ๊ณ ํ์ธ์. ์ด๋ ๋์ ์ฐ๊ธฐ๊ฐ ์ผ๋ฐ์ ์ธ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ์ค์ํฉ๋๋ค.
3. ์ธ๋ฑ์ค๋ฅผ ์ ์งํ์ง ์๊ฑฐ๋ ํต๊ณ๋ฅผ ์ ๋ฐ์ดํธํ์ง ์๊ธฐ
ํจ์ : ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ์์ด๋ฒ๋ฆฌ๋ ๊ฒ. ์กฐ๊ฐํ๊ฐ ์์ด๊ณ ํต๊ณ๊ฐ ์ค๋๋๋๋ก ๋ฐฉ์นํ๋ ๊ฒ. ์ ๋์๊ฐ: ์กฐ๊ฐํ๋ ์ธ๋ฑ์ค๋ ๋ ๋ง์ ๋์คํฌ I/O๋ฅผ ์ ๋ฐํ์ฌ ์ฟผ๋ฆฌ ์๋๋ฅผ ์ ํ์ํต๋๋ค. ์ค๋๋ ํต๊ณ๋ ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ์ด ์๋ชป๋ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ฒ ํ์ฌ ํจ๊ณผ์ ์ธ ์ธ๋ฑ์ค๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค. ํด๊ฒฐ์ฑ : ์ธ๋ฑ์ค ์ฌ๊ตฌ์ถ/์ฌ๊ตฌ์ฑ ๋ฐ ํต๊ณ ์ ๋ฐ์ดํธ๋ฅผ ํฌํจํ๋ ์ ๊ธฐ์ ์ธ ์ ์ง ๊ด๋ฆฌ ๊ณํ์ ๊ตฌํํ์ธ์. ์๋ํ ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ๋์ด ์ ์ ์๊ฐ์ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
4. ์ํฌ๋ก๋์ ์๋ชป๋ ์ธ๋ฑ์ค ์ ํ ์ฌ์ฉํ๊ธฐ
ํจ์ : ์๋ฅผ ๋ค์ด, ๋ฒ์ ์ฟผ๋ฆฌ์ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋์์ฑ์ด ๋์ OLTP ์์คํ ์ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ. ์ ๋์๊ฐ: ์๋ชป ์ ๋ ฌ๋ ์ธ๋ฑ์ค ์ ํ์ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์ํด ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ฌ๊ฐํ ์ฑ๋ฅ ๋ฌธ์ (์: OLTP์์ ๋นํธ๋งต ์ธ๋ฑ์ค๋ก ์ธํ ๊ณผ๋ํ ๋ฝ)๋ฅผ ์ ๋ฐํ ๊ฒ์ ๋๋ค. ํด๊ฒฐ์ฑ : ๊ฐ ์ธ๋ฑ์ค ์ ํ์ ํน์ฑ๊ณผ ํ๊ณ๋ฅผ ์ดํดํ์ธ์. ํน์ ์ฟผ๋ฆฌ ํจํด๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฌ๋ก๋(OLTP ๋ OLAP)์ ์ธ๋ฑ์ค ์ ํ์ ๋ง์ถ์ธ์.
5. ์ฟผ๋ฆฌ ๊ณํ์ ๋ํ ์ดํด ๋ถ์กฑ
ํจ์ : ์ฟผ๋ฆฌ ์ฑ๋ฅ ๋ฌธ์ ์ ๋ํด ์ถ์ธกํ๊ฑฐ๋ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ๋จผ์ ๋ถ์ํ์ง ์๊ณ ๋งน๋ชฉ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ. ์ ๋์๊ฐ: ๋นํจ์จ์ ์ธ ์ธ๋ฑ์ฑ, ๊ณผ๋ํ ์ธ๋ฑ์ฑ, ๊ทธ๋ฆฌ๊ณ ๋ ธ๋ ฅ ๋ญ๋น๋ก ์ด์ด์ง๋๋ค. ํด๊ฒฐ์ฑ : ์ ํํ RDBMS์์ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ฝ๊ณ ํด์ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ ์ฐ์ ์์๋ก ๋์ธ์. ์ด๋ ์ฟผ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์คํ๋๊ณ ์๋์ง ์ดํดํ๊ธฐ ์ํ ๊ฒฐ์ ์ ์ธ ์ง์ค์ ์์ฒ์ ๋๋ค.
6. ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ์ด์ ๋จ๋ ์ผ๋ก ์ธ๋ฑ์ฑํ๊ธฐ
ํจ์ : `is_active`(์ฐธ/๊ฑฐ์ง ๋ ๊ฐ์ ๊ณ ์ ๊ฐ๋ง ๊ฐ์ง)์ ๊ฐ์ ์ด์ ๋จ์ผ ์ด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ. ์ ๋์๊ฐ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ์ธ๋ฑ์ค๋ฅผ ์ค์บํ ๋ค์ ์ฃผ ํ ์ด๋ธ์ ๋ง์ ์กฐํ๋ฅผ ์ํํ๋ ๊ฒ์ด ์ค์ ๋ก๋ ํ ์ด๋ธ ์ ์ฒด ์ค์บ์ ํ๋ ๊ฒ๋ณด๋ค ๋ ๋๋ฆฌ๋ค๊ณ ํ๋จํ ์ ์์ต๋๋ค. ์ธ๋ฑ์ค๋ ์์ฒด์ ์ผ๋ก ํจ์จ์ ์ผ ๋งํผ ์ถฉ๋ถํ ํ์ ํํฐ๋งํ์ง ์์ต๋๋ค. ํด๊ฒฐ์ฑ : ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ์ด์ ๋ํ ๋ ๋ฆฝํ ์ธ๋ฑ์ค๋ ๊ฑฐ์ ์ ์ฉํ์ง ์์ง๋ง, ์ด๋ฌํ ์ด์ ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ด ๋ค์์ ๋ณตํฉ ์ธ๋ฑ์ค์ *๋ง์ง๋ง* ์ด๋ก ํฌํจ๋ ๋ ๋งค์ฐ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค. OLAP์ ๊ฒฝ์ฐ, ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ ์ด๋ฌํ ์ด์ ์ ํฉํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ์ ๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ
๊ธ๋ก๋ฒ ๊ณ ๊ฐ์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃจ์ ์ ์ค๊ณํ ๋, ์ธ๋ฑ์ฑ ์ ๋ต์ ์ถ๊ฐ์ ์ธ ๋ณต์ก์ฑ๊ณผ ์ค์์ฑ์ ๋ ๊ฒ ๋ฉ๋๋ค.
1. ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ค๋ฉ
์ง์ ํ ๊ธ๋ก๋ฒ ๊ท๋ชจ๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ข ์ข ์ฌ๋ฌ ์ง๋ฆฌ์ ์ง์ญ์ ๋ถ์ฐ๋๊ฑฐ๋ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋จ์๋ก ์ค๋ฉ(๋ถํ )๋ฉ๋๋ค. ํต์ฌ ์ธ๋ฑ์ฑ ์์น์ ์ฌ์ ํ ์ ์ฉ๋์ง๋ง ๋ค์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค:
- ์ค๋ ํค ์ธ๋ฑ์ฑ: ์ค๋ฉ์ ์ฌ์ฉ๋๋ ์ด(์: `user_id` ๋๋ `region_id`)์ ๋ฐ์ดํฐ๊ฐ ๋ ธ๋ ๊ฐ์ ๋ถ์ฐ๋๊ณ ์ ๊ทผ๋๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ฏ๋ก ํจ์จ์ ์ผ๋ก ์ธ๋ฑ์ฑ๋์ด์ผ ํฉ๋๋ค.
- ํฌ๋ก์ค-์ค๋ ์ฟผ๋ฆฌ: ์ธ๋ฑ์ค๋ ์ฌ๋ฌ ์ค๋์ ๊ฑธ์น ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ง๋ง, ์ด๋ฌํ ์ฟผ๋ฆฌ๋ ๋ณธ์ง์ ์ผ๋ก ๋ ๋ณต์กํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค.
- ๋ฐ์ดํฐ ์ง์ญ์ฑ: ์ฃผ๋ก ๋จ์ผ ์ง์ญ ๋๋ ์ค๋ ๋ด์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์ฟผ๋ฆฌ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์ต์ ํํ์ธ์.
2. ์ง์ญ๋ณ ์ฟผ๋ฆฌ ํจํด ๋ฐ ๋ฐ์ดํฐ ์ ๊ทผ
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์ง์ญ์ ์ฌ์ฉ์๋ก๋ถํฐ ๋ค๋ฅธ ์ฟผ๋ฆฌ ํจํด์ ๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์์ ์ฌ์ฉ์๋ `product_category`๋ก ์์ฃผ ํํฐ๋งํ๋ ๋ฐ๋ฉด, ์ ๋ฝ ์ฌ์ฉ์๋ `manufacturer_id`๋ก ํํฐ๋งํ๋ ๊ฒ์ ์ฐ์ ์ํ ์ ์์ต๋๋ค.
- ์ง์ญ๋ณ ์ํฌ๋ก๋ ๋ถ์: ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ง๋ฆฌ์ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ๊ณ ์ ํ ์ฟผ๋ฆฌ ํจํด์ ์ดํดํ์ธ์.
- ๋ง์ถคํ ์ธ๋ฑ์ฑ: ์ง์ญ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ ์ฝ๊ธฐ ๋ณต์ ๋ณธ์ด ์๋ ๊ฒฝ์ฐ, ํน์ ์ง์ญ์์ ๋ง์ด ์ฌ์ฉ๋๋ ์ด์ ์ฐ์ ์์๋ก ํ๋ ์ง์ญ๋ณ ์ธ๋ฑ์ค๋ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ ์ตํ ์ ์์ต๋๋ค.
3. ์๊ฐ๋ ๋ฐ ๋ ์ง/์๊ฐ ๋ฐ์ดํฐ
`DATETIME` ์ด์ ๋ค๋ฃฐ ๋, ํนํ ์๊ฐ๋์ ๊ฑธ์ณ์๋ ์ ์ฅ์ ์ผ๊ด์ฑ(์: UTC)์ ๋ณด์ฅํ๊ณ ์ด๋ฌํ ํ๋์ ๋ํ ๋ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ํด ์ธ๋ฑ์ฑ์ ๊ณ ๋ คํ์ธ์. ๋ ์ง/์๊ฐ ์ด์ ๋ํ ์ธ๋ฑ์ค๋ ์๊ณ์ด ๋ถ์, ์ด๋ฒคํธ ๋ก๊น ๋ฐ ๋ณด๊ณ ์ ๋งค์ฐ ์ค์ํ๋ฉฐ, ์ด๋ ๊ธ๋ก๋ฒ ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๋ฐ์ ์ ๋๋ค.
4. ํ์ฅ์ฑ ๋ฐ ๊ณ ๊ฐ์ฉ์ฑ
์ธ๋ฑ์ค๋ ์ฝ๊ธฐ ์์ ์ ํ์ฅํ๋ ๋ฐ ๊ธฐ๋ณธ์ ์ ๋๋ค. ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๊ณ์ ์ฆ๊ฐํ๋ ๋์ ์ฟผ๋ฆฌ ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฅ๋ ฅ์ ํจ๊ณผ์ ์ธ ์ธ๋ฑ์ฑ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ๋ํ ์ ์ ํ ์ธ๋ฑ์ฑ์ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ์ค์ฌ ์ฝ๊ธฐ ๋ณต์ ๋ณธ์ด ๋ ๋ง์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ณ ์ ์ฒด ์์คํ ๊ฐ์ฉ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
5. ๊ท์ ์ค์ ๋ฐ ๋ฐ์ดํฐ ์ฃผ๊ถ
์ง์ ์ ์ธ ์ธ๋ฑ์ฑ ๋ฌธ์ ๋ ์๋์ง๋ง, ์ธ๋ฑ์ฑํ๊ธฐ๋ก ์ ํํ ์ด์ ๋๋๋ก ๊ท์ ์ค์(์: ๊ฐ์ธ ์๋ณ ์ ๋ณด, ๊ธ์ต ๋ฐ์ดํฐ)์ ๊ด๋ จ๋ ์ ์์ต๋๋ค. ๊ตญ๊ฒฝ์ ๋์ด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ค๋ฃฐ ๋ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ๊ทผ ํจํด์ ์ ์ํ์ธ์.
๊ฒฐ๋ก : ๊ณ์๋๋ ์ต์ ํ ์ฌ์
์ ๋ต์ ์ธ๋ฑ์ฑ์ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ต์ ํ๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ , ํนํ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ๋ฌธ๊ฐ์๊ฒ ์์ด์๋ ์ ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ์ ์ ์ธ ์์ ์ด ์๋๋ผ ๋ถ์, ๊ตฌํ, ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฐ์ ์ ์ง์์ ์ธ ์ฌ์ ์ ๋๋ค.
๋ค์ํ ์ ํ์ ์ธ๋ฑ์ค๋ฅผ ์ดํดํ๊ณ , ์ธ์ ์ ์ ์ฉํด์ผ ํ๋์ง ์ธ์ํ๋ฉฐ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๊ณ , ์ผ๋ฐ์ ์ธ ํจ์ ์ ํผํจ์ผ๋ก์จ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ด๋์ด๋ด๊ณ , ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ๋ผ๊ฐ ์ญ๋์ ์ธ ๊ธ๋ก๋ฒ ๋์งํธ ๊ฒฝ์ ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋๋ก ํจ์จ์ ์ผ๋ก ํ์ฅ๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
์คํ ๊ณํ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ๋ถ์ํ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์. ํต์ ๋ ํ๊ฒฝ์์ ๋ค๋ฅธ ์ธ๋ฑ์ค ์ ๋ต์ ์คํํด ๋ณด์ธ์. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ธ์. ์ธ๋ฑ์ค ์ ๋ต์ ๋ง์คํฐํ๋ ๋ฐ ํฌ์ํ ์๊ฐ์ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ๊ฒฌ๊ณ ํ๋ฉฐ ์ ์ธ๊ณ์ ์ผ๋ก ๊ฒฝ์๋ ฅ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ํํ๋ก ๋ณด์๋ฐ์ ๊ฒ์ ๋๋ค.