์ด ๊ธ์ ์๋ ๊ธ์ ์ฝ์ผ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ๊ณผ, ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ ์ ๋ฆฌํ ๊ธ์
๋๋ค.
https://mangkyu.tistory.com/286
B- Tree๋ BinaryTree(์์์ด 2๊ฐ์ธ ํธ๋ฆฌ)์์ ๊ฐ๋ ์ ํ์ฅํด n๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋๋ก ํ ๊ฒ์ด๋ค.
DB์๋ ํ์ด์ง๋ผ๋ ๊ฐ๋ ์ด ์๋๋ฐ, ํ์ด์ง๋ ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ(๋ฒํผํ)์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์ต์ ๋จ์์ด๋ค. ์ธ๋ฑ์ค์ PK, ํ ์ด๋ธ์ ๋ชจ๋ ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌ๋๋ค.
ํ์ด์ง: ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ(๋ฒํผํ)์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์ต์ ๋จ์
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ด์ง์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ต๋ํ ์๊ฒ ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ง์ฝ ํ์ด์ง์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํฌ๋ค๋ฉด ์๋ 2๊ฐ์ง ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
- ํ์ด์ง์ ๋ฐ์ดํฐ๊ฐ ์กฐ๊ธ๋ฐ์ ๋ชป๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ์ฝ์ด์์ผํ๋ค
=>๋์คํฌ I/O ์ฆ๊ฐ - ํ์ด์ง์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
=>๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํ ์ ์๋ ํ์ด์ง์ ์ ๊ฐ์
DB์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด์๋ ๋์คํฌ I/O ์์ฒด๋ฅผ ์ค์ด๋ ๊ฒ์ด ํต์ฌ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ ํ์ด์ง ๋จ์๋ก ์ ์ฅ๋๋ฉฐ, ์ธ๋ฑ์ค ํค๋ฅผ ๋ฐํ์ผ๋ก ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํค๋ค์ ๋ฐ๋ผ ๋ฆฌํ๋ ธ๋์ ๋๋ฌํ๋ฉด (์ธ๋ฑ์ค ํค, PK) ์์ด ์ ์ฅ๋์ด ์๋ค. ์ฆ ์ธ๋ฑ์ค๋ ๋น ๋ฅด๊ฒ ์ธ๋ฑ์คํค์ ๋์ํ๋ PK๊ฐ์ ์ฐพ์ ์ ์๋๋ก ๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ฐพ์๋ธ PK์ ๋์ํ๋ ๋ ์ฝ๋ ๊ฐ์ ์ฝ์ด์ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฐพ์๋ธ PK๊ฐ ์ด๋ค ํ์ด์ง์ ์ ์ฅ๋์ด ์๋์ง๋ ์ ์ ์๋ค. (์ธ๋ฑ์ค๋ ํ ์ด๋ธ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.) ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ ๋๋ค I/O๊ฐ ๋ฐ์ํ๋ค.
์ฆ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค๋ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ํตํด PK์ฐพ๊ธฐ-> ์ฐพ์ PK๋ฅผ ํตํ ๋ ์ฝ๋ ์กฐํ๋ฅผ ํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ ์ฝ๋๋ฅผ ์กฐํํ๋ ๊ฒ์ ํ๋์ ๋ ์ฝ๋๋ฅผ ์กฐํํ๋ ๊ฒ ๋ณด๋ค ๋น์ฉ์ด ๋ง์ด ๋ ๋ค. ๊ทธ๋ ๊ธฐ์ ์ฝ์ด์ผ ํ ๋ ์ฝ๋์ ๊ฑด ์๊ฐ ์ ์ฒด ํ ์ด๋ธ ๋ ์ฝ๋์ 20~25%๋ฅผ ๋์ด๊ฐ๋ฉด ๊ทธ๋ฅ ์ฝ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ฉฐ ์ด๋๋ ์ตํฐ๋ง์ด์ ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์์ฐ๊ณ ์ฒ๋ฆฌํ๋ค.
DB๋ณ ์ตํฐ๋ง์ด์ ๋ ์ด ๋ถ๋ถ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น?
1. Oracle
Oracle์ ์ตํฐ๋ง์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ์ด์ผ ํ ๋ ์ฝ๋๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์ 5% ์ดํ์ผ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. 5% ์ด๊ณผ ์, ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ด ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ ์ ์์ต๋๋ค.
2. SQL Server
SQL Server์ ๊ฒฝ์ฐ, ์ตํฐ๋ง์ด์ ๊ฐ ๋๋ต 20% ์ดํ์ ๋ ์ฝ๋๋ฅผ ์กฐํํด์ผ ํ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. 20%๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ํ ์ด๋ธ ์ค์บ์ ์ ํํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
3. MySQL
MySQL์ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๋ณดํต 10% ๋ด์ธ์ ๋ ์ฝ๋๋ฅผ ์กฐํํด์ผ ํ ๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.์ด ๋น์จ์ ์ด๊ณผํ๋ฉด MySQL์ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ์ ํํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ผ ํ๋จํ ์ ์์ต๋๋ค.
4. PostgreSQL
PostgreSQL์ ์ตํฐ๋ง์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก 25% ์ดํ์ ๋ ์ฝ๋๋ฅผ ์กฐํํด์ผ ํ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.25%๋ฅผ ์ด๊ณผํ๋ฉด ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ผ๋ก ์ ํํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
5. MariaDB
MariaDB๋ MySQL๊ณผ ์ ์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ต 10% ๋ด์ธ์ ๋ ์ฝ๋๋ฅผ ์กฐํํ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.๊ฒฐ๋ก
์ตํฐ๋ง์ด์ ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ฑ๊ณผ ์ฟผ๋ฆฌ์ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ ๋ฐ์ ์ผ๋ก, ์ฝ์ด์ผ ํ ๋ ์ฝ๋๊ฐ ์ ์ฒด ํ ์ด๋ธ์ 5%์์ 25% ์ฌ์ด์ผ ๋ ์ธ๋ฑ์ค ์ฌ์ฉ์ด ๊ณ ๋ ค๋๋ฉฐ, ์ด ๋น์จ์ ์ด๊ณผํ๋ฉด ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ด ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋น์จ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ถํฌ, ์ธ๋ฑ์ค์ ์ข ๋ฅ, ์ฟผ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก, ์ต์ ์ ์ฑ๋ฅ์ ์ํด์๋ ์ค์ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ฐ DBMS์ ํต๊ณ ์ ๋ณด์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ฌ ํ์ํ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ ์ธ๋ฑ์ค๋ฅผ ์ต์ ํํ ์๋ ์์ต๋๋ค.
์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ํตํ PK์กฐํ -> PK๋ฅผ ํตํ ๋ ์ฝ๋ ์กฐํ๋ผ๊ณ ํ๋๋ฐ, ์ธ๋ฑ์ค๋ ๋ ์ฝ๋์ ์ฃผ์๋ฅผ ๋งคํ์ํค๋ฉด ์๋๋?ํ๋ ์๋ฌธ์ ๊ฐ์ง์๋ ์๋ค. ์ค์ ๋ก ๋ช๋ช ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋งคํ์ํจ๋ค. ํ์ง๋ง MySQL์์๋ PK๊ฐ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋ง์ผ PK๊ฐ ๋ฐ๋๋ฉด ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น๊ฐ ๋ฐ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ PK์ ์์กดํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ธ๋ฑ์ค๋ PK์ ๋งคํ๋์ด ์๊ธฐ ๋๋ฌธ์ PK๊ฐ ํด์๋ก ์์ข๋ค. PK๊ฐ์ด ํด์๋ก ํ ํ์ด์ง์ ๋ด์ ์ ์๋ ์ธ๋ฑ์ค ์ ๋ณด๊ฐ ์ค์ด๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ๋นํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค. ํ์ด์ง์ ์๊ฐ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ์ ๊น์ด๋ ์ง๋์น๊ฒ ๊น์ด์ง๋ค.
์ธ๋ฑ์ค์๋ ์ฌ๋ฌ๊ฐ์ ์ปฌ๋ผ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋๋ฐ, ์ฌ๊ธฐ์๋ PK๋ ํฌํจ๋ ์ ์๋ค. ์ด๋ฅผ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค(Multi Column Index)๋ผ๊ณ ํ๋ค. ๋ง์ฝ A, B, C๋ฅผ ๋ฌถ์ด ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด B๋ A์ ์์กดํ์ฌ, C๋ B์ ์์กดํ์ฌ ์ ๋ ฌ๋๋ค.
๋ง์ฝ emp_no, dept_no๋ก ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ ๋, emp_no = 150์ด๊ณ dept_no = D003์ธ ๊ฐ์ ์ฐพ๋๊ฒ๊ณผ, dept_no=D003์ด๊ณ emp_no=150์ธ ๊ฐ์ ์ฐพ๋ ๊ฒ์ ์๊ฐ์ด ๋ค๋ฅผ๊น?
DB ์ตํฐ๋ง์ด์ ๊ฐ ์์์ ์์๋ฅผ ๋ฐ๊ฟ์ ์ํํ ์๋ ์๊ธฐ๋ ํ๋ค. ๊ทธ๋ ์ง๋ง ์์๋ฅผ ๋ฐ๊ฟ์ ์ธ๋ฑ์ค๋ฅผ ํ๋๋ก ํ๋ค๋ ๋ณด์ฅ์ด ์๊ธฐ ๋๋ฌธ์ ์ฒซ๋ฒ์งธ์ฒ๋ผ ์ง์ ์ธ๋ฑ์ค๋ฅผ ํ์คํ ํ๋๋ก ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
๊ทธ๋ ๊ธฐ์ ์ธ๋ฑ์ค์์๋ ์ปฌ๋ผ์ ์์๊ฐ ๋งค์ฐ ์ค์ํ๋ค.
์ถ๊ฐ์ ์ผ๋ก ์นด๋๋๋ฆฌํฐ(๊ณ ์ ์ฑ)๊ฐ ๋์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ๋ ๊ฒ๋ ์ค์ํ๋ค. ํ์ง๋ง ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ๋๋ผ๋ ์ ๋ ฌ์ด๋ ๊ทธ๋ฃจํ ๋ฑ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ๊ณ ๋ คํด์ผํ๋ค. MySQL์์๋ ๊ฐ์ด 1๊ฐ๋ง ์กด์ฌํ๋๋ก ํ๊ธฐ ์ํด ์ ๋ํฌ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด์ผ ํ ์๋ ์๋ค. ์ ๋ํฌ ์ธ๋ฑ์ค๋ ๋ฌด๊ฒฐ์ฑ์ ์ํ ์ค๋ณต ๊ฒ์ฌ๊ฐ ํ์ํด ์ฐ๊ธฐ ์ฑ๋ฅ์ด ๋ฎ์์ง ์๋ ์์ง๋ง 1๋ฒ๋ง ์ฝ์ด๋ ๋๋ ์ฝ๊ธฐ ์ฑ๋ฅ์ ์ฌ๋ผ๊ฐ๋ค.
์ ๋ํฌ ์ธ๋ฑ์ค๋?
์ ๋ํฌ ์ธ๋ฑ์ค๋ ํด๋น ์ปฌ๋ผ์ด ์ ๋ํฌํ๋ค๊ณ ๋งํนํด๋๋ ๊ฒ. ์ค์ ๋ก ์ปฌ๋ผ์ unique์ต์ ์ ๊ฑธ์ด๋ ๋ด๋ถ์ ์ผ๋ก๋ unique์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ์ฒ๋ฆฌํ๋ค.
์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์๋ ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ๋ ์ฌ๋ก๋ ๊ทธ๋ฃจํ, count๋ฑ์ ํจ์จ์ ์ผ๋ก ์ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด์ SELECT dept_id, COUNT(*) FROM employees GROUP BY dept_id ์ฟผ๋ฆฌ์์ dept_id์ ์ธ๋ฑ์ค๊ฐ ์ค์ ๋์ด์๋ค๋ฉด ํ ์ด๋ธ ํ ์ค์บ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ฑ์ค, pk์์ ์ ์ฅํ ๊ฐ๋ง ์ค์บํ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ค์บํ ์ ์๋ค.
์ธ๋ฑ์ค์ ์ ๋ ฌ๊ณผ ์ค์บ ๋ฐฉํฅ
์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ์ ์ ๋ ฌ ์์๋ฅผ ์ค์ ํ ์ ์๋ค. ์ธ๋ฑ์ค๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ ์ญ์์ผ๋ก ์ฝ์ ์ ์๊ณ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๊ฐ๋ฅํ๋ค. ์ฝ๋ ๋ฐฉ๋ฒ์ ๊ทธ๋๊ทธ๋ ์ตํฐ๋ง์ด์ ๊ฐ ํจ์จ์ ์ด๋ผ๊ณ ์๊ฐํ๋ ์์๋ก ์ฝ๋๋ฐ, ์๋ฅผ ๋ค์ด ์ญ์์ผ๋ก ์ ๋ ฌํด์ ์ฝ๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด ์ตํฐ๋ง์ด์ ๋ ์ญ์์ผ๋ก ์ ๊ทผํด ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ฌ ๊ฒ์ด๋ค. ์ธ๋ฑ์ค๋ฅผ ์ฝ๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์ ์ ์ค์บ(Index Forward Scan), ์ธ๋ฑ์ค ์ญ์ ์ค์บ(Index Backward Scan)์ผ๋ก ๋๋๋ค.
์ฐธ๊ณ ํ ์ ์ ์ธ๋ฑ์ค๋ ์ญ์ ์ค์บ๋ณด๋ค ์ ์ ์ค์บ์ด ๋ ๋น ๋ฅด๋ค๋ ๊ฒ์ด๋ค. ๊ทธ ์ด์ ๋ ํ์ด์ง ์ ๊ธ์ด ์ธ๋ฑ์ค ์ ์ ์ค์บ์ ์ ํฉํ๊ณ , ํ์ด์ง ๋ด์์ ์ธ๋ฑ์ค ๋ ์ฝ๋๊ฐ ๋จ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. (์นด์นด์ค ํ ํฌ์์ ์์ธํ ์ค๋ช )
๋ ์ฝ๋ ์ถ๊ฐ, ์ญ์ ์์
๋ ์ฝ๋ ์ถ๊ฐ
๋ ์ฝ๋ ์ถ๊ฐ์ ๋น์ฉ์ด 1์ด๋ผ๋ฉด ์ธ๋ฑ์ค ์ถ๊ฐ๋น์ฉ์ ์ฝ 1.5์ด๋ค. ๊ทธ๋ ๊ธฐ์ ๋ง์ฝ ์ธ๋ฑ์ค๊ฐ 3๊ฐ๋ผ๋ฉด ๋ ์ฝ๋ ์ถ๊ฐ ๋น์ฉ์(1+1.5x3)์ด ๋๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค ์ถ๊ฐ ์์ ์ ์ฆ์ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ์๋ค๊ฐ ํ๋ฒ์ ์ฐ๊ธฐ๋ ํ๋ค.
์ฅ์ : ๋์คํฌ ์ฐ๊ธฐ ๋น์ฉ ๊ฐ์, ์์ฒญ ์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ๋ก ๊ฒฐ๊ณผ ๋ฐํํ๋ฏ๋ก ๋น ๋ฅด๋ค.
๋จ์ : ์ ๋ํฌ ์ธ๋ฑ์ค์ ๊ฐ์ด ์ค๋ณต ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค๋ฉด ์ฆ์ ๋ฐ์ํด์ผ ํ๋ค.
์ ๋ํฌ ์ธ๋ฑ์ค๋ ์ค๋ณต ๊ฒ์ฌ ์ ์ฝ๊ธฐ ์ ๊ธ, ์ฐ๊ธฐ ์ ์ฐ๊ธฐ ์ ๊ธ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๊ณผ์ ์์ ๋ฐ๋๋ฝ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ฌ ์์
์ด ์ง์ฐ๋ ์ ์๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฐ๋์ ์ ์ผ์ฑ์ด ๋ณด์ฅ๋์ด์ผ ํ ๋ ์ฌ์ฉํ๋ค. ๋ํ ๋ ์ฝ๋ ์ถ๊ฐ ์ ์ธ๋ฑ์ค์ ๋ฆฌํ๋
ธ๋ ํ์ด์ง๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ๋ฆฌํ๋
ธ๋๋ฅผ ๋ถ๋ฆฌํด์ผํ๋๋ฐ, ์ด๋ ์์ ๋
ธ๋์ ์ ์ฅ๋ ์์ ๋
ธ๋์ ๊ฐ๊น์ง ๋ฐ๊ฟ์ผํ๋ค๋ ๋จ์ ์ด ์๋ค.
๋ ์ฝ๋ ์ญ์
๋ ์ฝ๋ ์ญ์ ์ ์ธ๋ฑ์ค๋ ๊ฐ์ด ์ญ์ ํด์ผํ๋๋ฐ, ์ด๊ฒ์ ๊ทธ๋ฅ ๋ฆฌํ๋ ธ๋์ ์ญ์ ๋งํน ์ฒ๋ฆฌ๋ง ํ๋ฉด ๋๋ค. ์ด ๊ณต๊ฐ์ ๋ ์ฐ์ผ์๋, ์๋์๋ ์๋ค. ์ด๋ ํ๋ ์ญ์ ๋งํน์ ๋์คํฌ ์ฐ๊ธฐ ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ง์ฐ๋ ์ ์๋ค.
ํนํ๋ MySQL์ ๋์ฑ ์ฃผ์ํด์ผํ๋๋ฐ, MySQL์ ์ ๊ธ ์ค ์ผ๋ถ ๋ ์ฝ๋ ์ ๊ธ(๋ฅ์คํธ ํค๋ฝ ๋๋ ๊ฐญ ๋ฝ)์ ๊ฒฝ์ฐ ๊ฒ์์ ์ํํ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผ ํ ํ
์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ ๊ทผ๋ค. ๊ทธ๋ ๊ธฐ์ UPDATE ๋๋ DELETE๋ฅผ ํ ๋ ์ ์ ํ ์ฌ์ฉํ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ๋ถํ์ํ๊ฒ ๋ง์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผ๋ค. ์ฌ์ง์ด๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๊ธฐ๋ ํ๋ค.
๋ ์ฝ๋ ์์
๋ ์ฝ๋ ์์ ์ PK, ์ธ๋ฑ์ค, ์ผ๋ฐ ๊ฐ์ ๋ฐ๋ผ ๋๋๋ค. ๋จผ์ PK๋ฅผ ์์ ํ ๊ฒฝ์ฐ ์ต์ 2๋ฒ์ ์์ (delete+insert)์ด ํ์ํ๋ค. ๋ง์ฝ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ์ธ๋ฑ์ค์๋ ์ถ๊ฐ ์์ ์ ํด์ค์ผ ํ๋ค. ์ธ๋ฑ์ค๋ฅผ ์์ ํ ๊ฒฝ์ฐ ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค์ ์ถ๊ฐ ์์ ์ ํด์ผํ๋ค. ๋ ์ฝ๋๋ฅผ ์์ ํ๋ค๋ ๊ฒ์ delete+insert์ด๋ค. ๊ทธ๋ ๊ธฐ์ PK์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ฌ์ฉํ๊ฒ ๋๋ค.
๋ ์ฝ๋ ๊ฒ์
PK๋ฅผ ์ด์ฉํ ๊ฒ์ - ๋ ์ฝ๋์ ์ค์ ์์น๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋น ๋ฅด๋ค.
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ๊ฒ์ - ์ธ๋ฑ์ค ->PK -> ์ค์ ์์น ์ด๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๋ค.
PK์ ์ธ๋ฑ์ค ๋ชจ๋ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก "ํธ๋ฆฌ ๊ฒ์"์ ํตํด ๊ฐ์ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์จ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ ๋ํฌ ์ธ๋ฑ์ค๋ผ๋ฉด ์ตํฐ๋ง์ด์ ๋ ์ฐพ์์ผ ํ ๊ฐ์ด ํ๋๋ผ๋ ๊ฒ์ ์๊ณ ์๋ค. ์ ๋ํฌ ์ธ๋ฑ์ค๋๋ฌธ์ MySQL์ ์ฒ๋ฆฌ๋ฐฉ์ ๋ณํ๋ ์ฐจ์ด์ ์ด ๋ง์ด ์๋๋ฐ ๊ฒฐ๋ก ์ ์ผ๋ก๋ ๋ค๋ฅธ ๊ฐ๋ณด๋ค ์ํ์ด ๋น ๋ฅด๋ค.
์ผ๋ฐ ๊ฐ์ ์ด์ฉํ ๊ฒ์ - ๊ธฐ๋ณธ์ ์ผ๋ก ํ
์ด๋ธ ํ์ค์บ์ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ ๊ฑธ๋ฆฐ๋ค. B- Tree๋ ์ธ๋ฑ ํค ๊ฐ์ ๋ณํํ์ง ์๊ณ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅํ๋ค. (๋ฌผ๋ก Varchar 255๋ฅผ ๋์ด๊ฐ๋ฉด ์๋ผ์ ์ธ๋ฑ์ค ๋ฅผ ๋ง๋ ๋ค.) ๊ทธ๋์ =, >๋ฑ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ํค ๊ฐ์ ๋ท๋ถ๋ถ์ ๊ฒ์ํ๊ฑฐ๋ ๋ณํ๋ ๊ฐ์ผ๋ก ์ฟผ๋ฆฌํ๋ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋ค.
์ ๋ํฌ ์ธ๋ฑ์ค๋ก ์ธํด ๋ญ๊ฐ ๋ค๋ฅธ์ง MySQL์ ์ผ๋ถ ๋ ์ฝ๋ ์ ๊ธ์ด ๊ฒ์์ ์ํํ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทธ๊ณ ๊ทธ๋์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ ๊ทผ๋ค?
์ ๋ํฌ์ธ๋ฑ์ค๋ ์ค๋ณต๊ฒ์ฌ ์ ์ฝ๊ธฐ์ ๊ธ, ์ธ ๋๋ ์ฐ๊ธฐ ์ ๊ธ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ฝ ๋ฐ์ํ ์ ์๋ค.
์ฝ๊ธฐ ๋ฐฉ์์ ๋ฐ๋ฅธ ์ธ๋ฑ์ค์ ๋ถ๋ฅ
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
๋ฒ์๊ฐ ๊ฒฐ์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฝ๋ ๊ฒ์ด๋ค.
- ์ธ๋ฑ์ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ ์ฐพ๋๋ค.
- ์์ ์ง์ ๋ถํฐ ํ์ํ ๋งํผ ์ธ๋ฑ์ค๋ฅผ ์์๋๋ก ์ฝ๋๋ค.
- ์ฝ์ด๋ค์ธ ์ธ๋ฑ์ค์ PK๋ฅผ ์ด์ฉํด ์ต์ข ๋ ์ฝ๋๋ฅผ ์ฝ์ด์จ๋ค.(๋๋คI/O)
์ธ๋ฑ์ค์ PK๊ฐ ์ ์ฅ๋๋ ๊ฒ์ MySQL์ InnoDB๊ฐ ํด๋ฌ์คํฐ ํ ์ด๋ธ์ด๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ๋ค๋ฅธ DBMS์ ๊ฒฝ์ฐ์๋ ๋ค๋ฅผ ์ ์๋ค.
์ธ๋ฑ์ค ํ ์ค์บ
์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ค์บํ๋ ๊ฒ. ์ธ๋ฑ์ค๊ฐ A, B, C๋ก ๊ฑธ๋ ค์๋๋ฐ ์กฐ๊ฑด์ ์ B C์ ๋ํด์๋ง ๊ฑธ๋ ค์๊ฑฐ๋ count(*)์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ์ง ์๊ณ , ๋ค๋ง ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค ๋์คํฌ I/O๊ฐ ์ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ๋ฟ์ด๋ค.
๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ
์ธ๋ฑ์ค๋ฅผ ๋ฌ์ฑ๋ฌ์ฑ ์ฝ๋ ๋ฐฉ์์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก GroupBy(), MAX(), MIN()๋ฑ์์ ์ฌ์ฉํ๋ค. ์๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด์.
SELECT dept_no, MIN(emp_no)
FROM dept_emp
WHERE dept_no BETWEEN 'D002' AND 'D004'GROUP BY dept_no;
์ ์ฟผ๋ฆฌ์์ emp_no๋ dept_no์ ์์กดํด ์ ๋ ฌ๋๊ธฐ ๋๋ฌธ์ dept_no๊ทธ๋ฃน๋ณ๋ก ๋งจ ์ฒ์ emp_no๋ฅผ ์ฝ์ผ๋ฉด ๋๋ค. ์ตํฐ๋ง์ด์ ๋ ์ด๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฒ์์ด ์๋ emp_no๋ ์ฝ์ง ์๋๋ค.
์ธ๋ฑ์ค ์คํต ์ค์บ
MySQL 8.0๋ถํฐ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ธ๋ฑ์ค์ ๋ท ์ปฌ๋ผ๋ง์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ์ ์ตํฐ๋ง์ด์ ๊ฐ ์์์ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํ๋๋ก ํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด gender, birth_date์ ์ธ๋ฑ์ค๊ฐ ์๋ค๊ณ ํ์.
# ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ์ฟผ๋ฆฌ
SELECTgender, birth_date
FROMemployee
WHEREbirth_date >= '1994-12-26';
์ ์ฟผ๋ฆฌ๋ฅผ MySQL์ด ์๋์ ๊ฐ์ด ์ํํด์ค๋ค.
SELECTgender, birth_date
FROMemployee
WHEREgender = 'M'AND birth_date >= '1994-12-26';
SELECTgender, birth_date
FROMemployee
WHEREgender = 'F'AND birth_date >= '1994-12-26';
์ด์ ๊ฐ์ ์ธ๋ฑ์ค ์คํต ์ค์บ์ด ์ํ๋๋ ค๋ฉด ์๋ ์กฐ๊ฑด๋ค์ด ๋ง์กฑ๋์ด์ผ ํ๋ค.
- ์กฐํ๋๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ง์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค. (์ปค๋ฒ๋ง ์ธ๋ฑ์ค)
- ์ธ๋ฑ์ค์ ์ ํ ์ปฌ๋ผ์ด WHERE์ ์ ์๋ค.
- ์ธ๋ฑ์ค ์ ํ ์ปฌ๋ผ์ ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์์ผ ํ๋ค. (์ ๋ํฌํ ๊ฐ์ด ์ ์ด์ผ ํ๋ค.)
ํ ํ ์ด๋ธ ์ค์บ(์ธ๋ฑ์ค ์ฌ์ฉ X)
์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ํ ์ด๋ธ์ ํฌ๊ธฐ๋ ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ณด๋ค ํจ์ฌ ํฌ๊ธฐ ๋๋ฌธ์ ํ ํ ์ด๋ธ ์ค์บ์ ์๋นํ ๋ง์ ๋์คํฌ ์ฝ๊ธฐ๋ฅผ ํ์๋ก ํ๋ค. ๊ทธ๋์ MySQL์ ์ฐ์๋ ํ์ด์ง๋ฅผ ์ฝ๊ฒ ๋๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐ๋ ๋๋ฅผ ํตํด ๋ค์ ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์ด ๋ฉ๋ชจ๋ฆฌ(๋ฒํผํ)์ ๋ฃ์ด๋๋ค. ์ด๋ฅผ ๋ฆฌ๋ ์ดํค๋(Read Ahead)๊ธฐ๋ฅ์ด๋ผ๊ณ ํ๋ค. ๋ณดํต 4๊ฐ ํน์ 8๊ฐ์ ํ์ด์ง๋ถํฐ ์์ํด ์ต๋ 64๊ฐ์ ํ์ด์ง๊น์ง ์ฝ์ด์ค๋๋ก ์ฆ๊ฐ๋๋ค. ํ ์ธ๋ฑ์ค ์ค์บ์๋ ์ด๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค.
์ธ๋ฑ์ค ์ฌ์ฉ ์์ ์ฃผ์ ์ฌํญ
MySQL์๋ ๊ฐญ๋ฝ, ๋ฅ์คํธ ํค ๋ฝ, ์๋ ์ฆ๊ฐ๋ฝ ๋ฑ ๋ง์ ๋ฝ์ด ์๋๋ฐ ๊ทธ ์ค ๋ ์ฝ๋ ๋ฝ(Record Lock, Record only Lock)์ด ์ธ๋ฑ์ค์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด์๋ค. ๋ ์ฝ๋๋ฝ์ ๋ง ๊ทธ๋๋ก ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๊ธฐ ์ํ ๋ฝ์ธ๋ฐ MySQL์ ๊ฒฝ์ฐ ์ค์ ๋ ์ฝ๋๊ฐ ์๋๋ผ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผ๋ค๋ ์ ์์ ๋ค๋ฅธ DBMS์ ๋ค๋ฅด๋ค.
์์๋ฅผ ๋ณด๋ฉฐ ์ดํดํด๋ณด๋๋ก ํ์. ๋ง์ฝ ์ฑ, ์ด๋ฆ, ์ ํ๋ฒํธ ํ ์ด๋ธ์์ ์ฑ์๋ง ์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ ค์๋ค๊ณ ํ์. ์ด๋ ์ฑ์ด “๊น”์ด๊ณ ์ด๋ฆ์ด “๋ฏผ์ง”์ธ ์ปฌ๋ผ์ ์ ํ๋ฒํธ๋ฅผ ์์ ํ๋ ค๊ณ ํ ๋ ์ฑ=“๊น”์ด๋ผ๋ ์กฐ๊ฑด์ผ๋ก ์กฐํ๋ ๋ชจ๋ ์ธ๋ฑ์ค์ ๋ฝ์ ๊ฑด๋ค. ๋ง์ผ ์ฑ์๋ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ํ ์ด๋ธ์ ํ์ค์บํ๋ฉฐ ๋ ์ฝ๋๋ฅผ ๊ฐฑ์ ํ๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๊ฒ ๋๋ค.
๋ ์ฝ๋๋ฝ์ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค(PK) ๋๋ ์ ๋ํฌ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋ณ๊ฒฝ์ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ค. ๊ทธ ์ธ์๋?
๋๊ธ