0. ๋ฐฐ๊ฒฝ
DB๋ฅผ ๋ค๋ฃฐ ๋ ์ธ๋ฑ์ค์ ์ค์์ฑ์ ๋ชจ๋ฅด๋ ์ฌ๋์ ๊ฑฐ์ ์์ ํ ๋ฐ์.
์ด์์ ์ผ๋ก๋ ํ ์ด๋ธ ์ค๊ณ ์ด๊ธฐ ๋จ๊ณ์์ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
ํ์ง๋ง, ํ์ค์์๋ ์ฝ๋๊ฐ ๋ฐฐํฌ๋ ํ์์ผ
"DB ๋ถํ๊ฐ ๋๋ฌด ์ปค์ก๋ค ? "
"์กฐํ ์๋๊ฐ ์ ์ด๋ ๊ฒ ๋๋ฆฌ์ง"
์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ ๋ค๋ฆ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค๐
ํนํ, ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ์ด์ ์ ๋ด๋ถ ๋์ ์๋ฆฌ๋ฅผ ์ ํํ ์ดํดํ์ง ๋ชปํ๋ฉด
์ฑ๋ฅ ๊ฐ์ ์ ์ปค๋ ์คํ๋ ค ์๋๊ฐ ๋ ๋๋ ค์ง๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํฉ๋๋ค.
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ์ข์ฐํ๋ ํต์ฌ ์์์ ๋๋ค.
ํ์ง๋ง, ์๋ชป ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํค๋ ์๋ ์ ๊ฒ์ด ๋ ์๋ ์์ต๋๋ค.
์ค๋์ ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค !
1. ์ธ๋ฑ์ค(INDEX) ๋ ?
๋ค์ด๋ฒ ์์ด ์ฌ์ ์์ index ๋ ๋ฌด์จ ์๋ฏธ์ธ์ง ์ฐพ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์์ธ, ์์ธ์ ๋ง๋ค๋ค ๋ผ๊ณ ์ ์ํ๊ณ ์๋๋ฐ์.
DB ์ ์ ์ฉํด๋ณด์๋ฉด ?
์ธ๋ฑ์ค(index) ๋ DB ์์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ธ์ ๋๋ค !
์๋ฅผ ๋ค์ด ๋ง์ฝ 1000ํ์ด์ง๊ฐ ๋๋ ์ฑ ์์ ํน์ ๋จ์ด๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ?
- ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ -> ์ฒ์๋ถํฐ ๋๊น์ง ํ์ด์ง๋ฅผ ํ ์ฅ์ฉ ๋ชจ๋ ๋ค์ ธ์ผ ํฉ๋๋ค. (full scan)
- ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ -> ๋ชฉ์ฐจ์์ ํด๋น ํค์๋๋ฅผ ์ฐพ์ ๋ฐ๋ก ํด๋น ํ์ด์ง๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค !
- ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ → ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๊ฒ์ํด์ผ ํฉ๋๋ค (full scan)
- ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ → ์ ๋ ฌ๋ ์ธ๋ฑ์ค๋ฅผ ํ์ํ์ฌ ๋น ๋ฅด๊ฒ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
2. ์ธ๋ฑ์ค์ ์ ์ฅ ๊ตฌ์กฐ
์ฑ ์ ๋ชฉ์ฐจ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ชฉ์ฐจ๋ ๋ณธ๋ฌธ์ ๋ด์ฉ๊ณผ ๋ถ๋ฆฌ๋์ด ์์ง๋ง, ๋ณธ๋ฌธ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ๋์ต๋๋ค.
์ด์ฒ๋ผ ์ธ๋ฑ์ค๋ ๋ ผ๋ฆฌ์ , ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ ์ด๋ธ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฅ๋๋ฉฐ, ๋ฐ์ดํฐ ๊ฒ์์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค.
์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ฐ์ ์ปฌ๋ผ (๊ฒ์๊ฐ, ์์น์ ๋ณด) ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ฒ์๊ฐ (KEY) | ์์น์ ๋ณด (ROWID or Primary Key) | |
์ญํ | ๊ฒ์ ๊ธฐ์ค์ด ๋๋ ๊ฐ์ ์ ์ฅํฉ๋๋ค | ํด๋น ๋ฐ์ดํฐ์ ์์น๋ฅผ ์ ์ฅํฉ๋๋ค. |
๋ด์ฉ | ํ ์ด๋ธ์ ํน์ ์ด์ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด์ name ์ด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด name ์ ๊ฐ๋ค์ด KEY ์ปฌ๋ผ์ ์ ์ฅ๋ฉ๋๋ค. | KEY ๊ฐ์ ํด๋นํ๋ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ๋ํ๋
๋๋ค. Oracle ์ ROWID(๋ฌผ๋ฆฌ์ ์ฃผ์), MySQL(InnoDB) ๋ Primary Key ๋ฅผ ์ ์ฅํฉ๋๋ค. |
์ ๋ ฌ | ์ธ๋ฑ์ค๋ ์ผ๋ฐ์ ์ผ๋ก B-Tree ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ KEY ๊ฐ๋ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ๋ฉ๋๋ค. | ์์น์ ๋ณด ๋ก ์ ๋ ฌ๋์ง ์๊ณ , KEY ๊ฐ์ ์ ๋ ฌ ์์์ ๋ฐ๋ผ ์ ๋ ฌ๋ฉ๋๋ค. |
๊ฐ๊ฐ์ ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋๋ฐ์
๊ฒ์๊ฐ = ์ค์ ๊ฐ, ์์น์ ๋ณด = ์ค์ ๋ฐ์ดํฐ์ ์์น
๋ผ๊ณ ์๊ฐํ์๋ฉด ๊ฐ๋จํฉ๋๋ค !
3. ์ธ๋ฑ์ค์ ์์ฑ ๊ณผ์
์ธ๋ฑ์ค๊ฐ ์ ์ฅ๋๋ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ค๋ฉด ์ด์ ๋ ์ธ๋ฑ์ค์ ์์ฑ ๊ณผ์ ์ ๋ํด์ ์์๋ด ์๋ค !
์ธ๋ฑ์ค๋ ์ด 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ์์ฑ๋๊ฒ ๋ฉ๋๋ค.
- ์ ์ฒด ํ
์ด๋ธ ์ค์บ
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๋ ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ ์ฒด ํ ์ด๋ธ์ ์ค์บํฉ๋๋ค.
- ํน์ ์ปฌ๋ผ์๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ, ํด๋น ์ปฌ๋ผ๊ณผ ์์น์ ๋ณด(ROWID, PK) ๋ง ์ฝ์ต๋๋ค.
- ์ ๋ ฌ
- PGA(Process Global Area, ์๋ฒ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ) ๋ด์ Sort Area์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํฉ๋๋ค
- ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ ์ ์ฅ๋ ๊ตฌ์กฐ(B-tree, Hash ๋ฑ) ์ ๋ง๊ฒ ์ ๋ฆฌ๋ฉ๋๋ค
- ๋ง์ฝ PGA์ Sort Area๊ฐ ๋ถ์กฑํ๋ฉด, Temporary Tablespace(์์ ํ ์ด๋ธ์คํ์ด์ค)์ ์ ์ฅ ํ ๋์คํฌ์์ ์ ๋ ฌ์ ์ํํ๋๋ฐ ์ด๋ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค
- Block์ ๊ธฐ๋ก
- ์ ๋ ฌ์ด ๋๋ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ๋ธ๋ก์ ์ ์ฅ๋๋ฉฐ, ์ดํ B-Tree ๋๋ Bitmap ์ธ๋ฑ์ค๊ฐ ์์ฑ๋ฉ๋๋ค
- B-Tree ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ๋ฃจํธ ๋ ธ๋ - ๋ธ๋์น ๋ ธ๋ - ๋ฆฌํ ๋ ธ๋ ๊ตฌ์กฐ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ๋ฆฌํ ๋ ธ๋๋ ์ ๋ ฌ๋ ROWID ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ํ
- ์ธ๋ฑ์ค ์์ฑ ์ค DML(INSERT, UPDATE, DELETE)์ด ๋ฐ์ํ๋ฉด ์ผ๊ด์ฑ์ด ๊นจ์ง ์ํ์ด ์์ผ๋ฏ๋ก, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ ํํ๋ ์กฐ์น๊ฐ ํ์ํฉ๋๋ค.
- ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ธ ์ธ๋ฑ์ค ์์ฑ ๋ฐฉ์์์๋ ํ ์ด๋ธ์ Lock ํ์ฌ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ ํํฉ๋๋ค.
- Online Indexing ์ด ์ง์๋๋ ๊ฒฝ์ฐ ํ ์ด๋ธ์ ์ฝ์ผ๋ฉด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํ์ฉํ๋ฉด์๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค (์๋กญ๊ฒ ๋ฐ์ํ๋ DML ์์ ์ ์ถ์ ํ์ฌ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์)
4. ์ธ๋ฑ์ค๊ฐ ๋์ํ๋ ์์
name ์ ๊ธฐ์ค์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์๊ณ , name ์ PARK, KIM, LEE ๊ฐ ์๋ค๊ณ ํฉ์๋ค.
B-Tree ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ Oracle ๊ธฐ์ค ์ผ๋ก ์ธ๋ฑ์ค์๋ ์๋์ ๊ฐ์ด ์ ์ฅ๋๊ฒ ๋ฉ๋๋ค.
๊ฒ์๊ฐ | ์์น์ ๋ณด (ROWID) |
PARK | 1001 (์ค์ PARK ์ ๋ฐ์ดํฐ ์์น) |
KIM | 1002 (์ค์ KIM ์ ๋ฐ์ดํฐ ์์น) |
LEE | 1003 (์ค์ LEE ์ ๋ฐ์ดํฐ ์์น) |
์ด๋ ๊ฒ ์ ์ฅ๋๋ฉด ์ธ๋ฑ์ค๋
์ธ๋ฑ์ค ํ์ -> ๋ฐ์ดํฐ ์์น ํ์ธ -> ์ค์ ๋ฐ์ดํฐ ์กฐํ ์ ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ต๋๋ค.
์ฌ์ฉ์๊ฐ 'PARK' ์ด๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋
๐ 1๏ธโฃ B-Tree ์ธ๋ฑ์ค๋ฅผ ํ์
- name='PARK'์ ๊ฒ์ํ๋ฉด, B-Tree ์ธ๋ฑ์ค์์ ์ ๋ ฌ๋ ์์๋ก ํ์์ด ์์๋ฉ๋๋ค.
- ์ด์ง ํ์(Binary Search) ์ ์ํํ์ฌ ๋น ๋ฅด๊ฒ PARK๋ฅผ ์ฐพ์ต๋๋ค.
๐ 2๏ธโฃ ์ธ๋ฑ์ค์์ ๋ฐ์ดํฐ ์์น ํ์ธ
- Oracle: PARK์ ํด๋นํ๋ ROWID(1001) ๋ฅผ ์ฐพ์ต๋๋ค
- MySQL (InnoDB): PARK์ ํด๋นํ๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๋ฅผ ์ฐพ์ต๋๋ค
๐ 3๏ธโฃ ํ ์ด๋ธ์์ ์ค์ ๋ฐ์ดํฐ ์กฐํ
- Oracle: ROWID๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ง์ ์กฐํํฉ๋๋ค.
- MySQL (InnoDB): ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ฅผ ๋ค์ ๊ฒ์ํ ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
์ ํ๋ก์ธ์ค๋ก ๋์ํฉ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค ๐
5. ์ธ๋ฑ์ค๋ฅผ ๋จ๋ฐํ๋ฉด ์๋๋ ์ด์
๐ฌ : "์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์กฐํ ์๋๊ฐ ๋นจ๋ผ์ง๋๊น ๋ชจ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ผ๊ฒ ๊ตฐ ?! "
๐ โ๏ธ ๋ก ๊ทธ๋ ์ง ์์ต๋๋ค !
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋๋ก ๋์์ฃผ์ง๋ง, ๋ง๊ตฌ์ก์ด๋ก ์์ฑํ๋ฉด ์คํ๋ ค ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ด ๋๋น ์ง ์ ์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ๋จ๋ฐํ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- INSERT, DELETE, UPDATE ์๋ ์ ํ
- ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ๋๋ง๋ค, ๋ชจ๋ ์ธ๋ฑ์ค๋ ํจ๊ป ๊ฐฑ์ ํด์ผ ํฉ๋๋ค.
- ์ฆ, ์ธ๋ฑ์ค๊ฐ ๋ง์์ง์๋ก ๋ณ๊ฒฝ ์์ (์ฐ๊ธฐ ์์ , Write Operation)์ด ๋๋ ค์ง๋๋ค.
- ์ธ๋ฑ์ค์ ์ ์ฅ ๊ณต๊ฐ ์ฆ๊ฐ
- ์ธ๋ฑ์ค๋ ๊ฒฐ๊ตญ ๋์คํฌ(์คํ ๋ฆฌ์ง)์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ์ธ๋ฑ์ค๊ฐ ๋ง์์ง๋ฉด ๋์คํฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๊ณ , ์บ์ฑ ํจ์จ์ด ๋จ์ด์ง๋๋ค.
- ์ธ๋ฑ์ค ์ ํ์ด ๋นํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฐ๋ฅ์ฑ
- ์ธ๋ฑ์ค๊ฐ ๋ง์์ง๋ฉด, DB ์ตํฐ๋ง์ด์ ๊ฐ ์ด๋ค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ง ํ๋จํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ด ํ์ํฉ๋๋ค.
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ชป๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํด์ ์ฑ๋ฅ์ด ๋ ๋จ์ด์ง ์๋ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ SQL ์ ๋จผ์ ์ต์ ํ ํด์ผ ํฉ๋๋ค.
๋นํจ์จ์ ์ธ SQL์ ์ต์ ํํ๋ฉด ์ธ๋ฑ์ค ์์ด๋ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค !!
6. ๊ฒฐ๋ก
์ธ๋ฑ์ค๋ DB ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค.
ํ์ง๋ง ๋ฌด์กฐ๊ฑด ๋ง์ด ์ถ๊ฐํ๋ค๊ณ ์ข์ ๊ฒ์ ์๋๋๋ค.
๐ พ๏ธ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ด ๊ฐ๋ฅํ์ง๋ง
๐ โ๏ธ ๋ถํ์ํ ์ธ๋ฑ์ค๋ ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ๋ฐ๋์ SQL ์ ๋จผ์ ์ต์ ํํ๊ณ , ํ์ํ ๊ณณ์๋ง ์ ์คํ๊ฒ ์ ์ฉํด์ผ ํ๋ค๋ ์ฌ์ค์ ์์ง ๋ง์ธ์ !!
๋ค์ ๊ธ์์๋ ์ธ๋ฑ์ค์ ์ข ๋ฅ์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐
๋ ํผ๋ฐ์ค
'๐๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ ์ด๋ ? (0) | 2025.03.15 |
---|---|
Lock ์ด ์ ๋ฆฌ2 - ๋๊ด์ ๋ฝ, ๋น๊ด์ ๋ฝ, ๋ฐ๋๋ฝ, ๋ถ์ฐ๋ฝ (1) | 2025.02.28 |
Lock ์ด ์ ๋ฆฌ1 - ๊ธฐ๋ณธ์ ์ธ ๋ฝ ๊ฐ๋ & DB ๋ด๋ถ ๋ฝ ๊ตฌ์กฐ (0) | 2025.02.14 |
์ธ๋ฑ์ค์ ์ข ๋ฅ์ ๋ํด์ ์์๋ณด์ ! (0) | 2025.02.01 |