์์ฐจ I/O, ๋๋ค I/O
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ, ์ธ๋ฑ์ค ํ ์ค์บ
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค, ๋ ผ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
B-Tree Index, Hash Index
Hint
์ปดํจํฐ ๋๋ถ๋ถ์ ์ฃผ์ ์ฅ์น(CPU, RAM ๋ฑ)์ ๋๋ถ๋ถ ๋์งํธ ๋ฐฉ์์ด์ง๋ง, HDD๋ ์๋ ๋ก๊ทธ ๋ฐฉ์์ ์ฅ์น์ด๋ค. ๋์งํธ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ์ฃผ์ ์ฅ์น ๊ฐ์ ๋ฐ์ดํฐ ์ํต์ ๊ต์ฅํ ๋น ๋ฅธ๋ฐ, HDD๋ง ๊ทธ ํ์ด์ค์ ๋ง์ถ์ง ๋ชปํ๋ ์ํฉ์ด ๋ฐ์ํ๊ฒ ๋๋ค. ๊ทธ๋์ DB์์ ๋์คํฌ ์ฅ์น๋ ํญ์ ๋ณ๋ชฉ์ด ๋์ด ๋๋ ค์ง๋ ํ์์ด ๋น๋ฒํ๋ค. ์ด๋ฌํ ๊ธฐ๊ณ์ ๋์คํฌ ๋๋ผ์ด๋ธ๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด SSD(SolidStateDrive)์ด๋ค.
์์ฐจ I/O์ ๊ฒฝ์ฐ SSD์ HDD๊ฐ ๋น์ทํ ์ฑ๋ฅ์ ๋ณด์ผ ์ ์์ง๋ง, ๋๋ค I/O์ ๊ฒฝ์ฐ SSD๊ฐ ํจ์ฌ ์ฑ๋ฅ์ด ์ข๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์์ ์์ฐจ I/O ์์ ์ ๊ทธ๋ค์ง ๋น์ค์ด ํฌ์ง ์๊ณ ๋๋ค I/O๋ฅผ ํตํด ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์์ ์ด ๋ง์์ SSD๊ฐ ์ผ๋ฐ์ ์ผ๋ก DBMS์ ์ ํฉํ๋ค๊ณ ๋ณผ ์ ์๋ค. (ํนํ ์น ์๋น์ค ํ๊ฒฝ)
๊ธฐ๋ณธ์ ์ผ๋ก ๋์คํฌ ๋๋ผ์ด๋ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ํ ํ๋ํฐ๋ฅผ ํ์ ํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
- ์์ฐจ I/O๋ ๋ ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์์๋ฅผ ๋ฐ๋ผ ์ฐจ๋ก๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋๊ฐ๋ ๋ฐฉ์
- ๋๋ค I/O๋ ๋ ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์์๋ฅผ ๋ฐ๋ฅด์ง ์๊ณ ํ ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ํด ํ ๋ธ๋ก์ฉ ์ ๊ทผํ๋ ๋ฐฉ์
์์ ์์ ์์ 5๋ฒ
๋ง ์์ฐจI/O์ด๊ณ ๋๋จธ์ง๋ ๋๋ค I/O์ ํด๋นํ๋ค. 5๋ฒ์ ๋
ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์ผ๋ก ํ ๋ฐฉํฅ์ผ๋ก ์ฐ์ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์ด์ง๋ง, ๋๋จธ์ง๋ ์ฐ์ํ์ง ์์ ๋ฐฉํฅ์ผ๋ก ํ ๋ธ๋ก์ฉ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์ด๊ณ ์๋ค.
๊ตฌ์ฒด์ ์ธ ๋์ ๊ณผ์
- ์์ฐจI/O๋ 3๊ฐ์ ํ์ด์ง๋ฅผ ๋์คํฌ์ ๊ธฐ๋กํ๊ธฐ ์ํด ํ๋ฒ์ ์์คํ ์ฝ์ ์์ฒญ
- ๋๋I/O๋ ์ธ ๋ฒ์ ์์ฒญ
์ฆ ๋์คํฌ์ ๊ธฐ๋กํ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด ์์ฐจ I/O๋ ๋์คํฌ ํค๋๋ฅผ 1๋ฒ ์์ง์๊ณ , ๋๋ค I/O๋ 3๋ฒ ์์ง์๋ค.
๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ฝ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋์คํฌ ํค๋๋ฅผ ์์ง์ฌ์ ์ฝ๊ณ ์ธ ์์น๋ก ์ฎ๊ธฐ๋ ๋จ๊ณ์์ ๊ฒฐ์ ๋๋ค. ๋ฐ๋ผ์ ์ ๊ฒฝ์ฐ ์์ฐจ I/O
๊ฐ ๋๋ค I/O
๋ณด๋ค ์ธ ๋ฐฐ๊ฐ๋ ๋น ๋ฅด๋ค๊ณ ๋ณผ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ ํ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ผญ ํ์ํ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ฌ ๋๋ค I/O ์์ ์ ์ค์ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ์์ฐจ I/O๋ก ๋ฐ๊ฟ์ ์คํํ ๋ฐฉ๋ฒ์ด ์ ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ๊ณ ๋ก ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ๋๋ค I/O
๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํ ํ
์ด๋ธ ์ค์บ์ ์์ฐจ I/O
๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋์ ๋งค์ฐ ํฐ ํ
์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋๋ ํ ํ
์ด๋ธ ์ค์บ์ ์ฌ์ฉํ๋ค. (ex. ๋ฐ์ดํฐ ์จ์ด ํ์ฐ์ค, ํต๊ณ ์์
)
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋น๋ฒํ๊ฒ ์ฝ๊ณ ์ฐ๊ธฐ ๋๋ฌธ์, ๋๋ค I/O ์ ๋ถํ๋ฅผ ์ค์ฌ์ฃผ๊ณ ์ MySQL ์์๋ InnoDB ๋ฒํผ ํ
๋ฑ์ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋ ๊ฒ์ด๋ค.
Buffer Pool
๋ฒํผ ํ์ InnoDB๊ฐ ์ก์ธ์ค ํ ๋ ํ ์ด๋ธ ๋ฐ ์ธ๋ฑ์ค ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค. ๋ฒํผํ์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ฒ๋ฆฌํ ์ ์๊ฒํ์ฌ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ธ๋ค ์ ์ฉ ์๋ฒ์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ต๋ 80% ์ ๋๊ฐ ๋ฒํผํ์ ํ ๋น๋๋ค.
๋๋ ์ฝ๊ธฐ ์กฐ์์ ํจ์จ์ฑ์ ์ํด ๋ฒํผ ํ์ ์ฌ๋ฌ ํ์ ๋ณด์ ํ ์ ์๋ ํ์ด์ง๋ก ๋ถํ ๋๋ค. ์บ์ ๊ด๋ฆฌ ํจ์จ์ฑ์ ์ํด ๋ฒํผํ์ ๋งํฌ๋ ํ์ด์ง ๋ชฉ๋ก์ผ๋ก ๊ตฌํ๋๋ค. ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๋ ๋ค์ํ LRU ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์บ์์์ ์ข ๋ฃ(ํน์ ๋ง๋ฃ:aged out)๋๋ค.
๋ฒํผ ํ์ ํ์ฉํ์ฌ ์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ๋ ๋ ธํ์ฐ(๊ธฐ์ )์ MySQLํ๋์ ์ค์ํ ์ธก๋ฉด์ด๋ค.
- head: ์ต๊ทผ์ ์ ๊ทผ๋ (young) ํ์ด์ง๋ค์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- tail: ์ ๊ทผ ์๊ธฐ๊ฐ ๊ฐ์ฅ ์ค๋๋ (old) ํ์ด์ง๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ์ฌ์ฉ์ ์ฟผ๋ฆฌ์์ ๊ฐ์ฅ ์์ฃผ ์ ๊ทผ ๋๋ ๋ฐ์ดํฐ ํ์ด์ง๋ค์ new sublist์ ๋ณด๊ดํ๋ค. old sublist์๋ ์ ์ ๊ทผ ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, ์ดํ์ eviction ๋์์ผ๋ก ์ ์ ๋๋ค.
- ๋ฒํผ ํ์ 3/8 ์ old sublist๋ก ์ฌ์ฉ๋๋ค.
- ๋ฒํผ ํ ์ ์ฒด์ midpoint๋ new sublist์ tail๊ณผ old sublist์ head๊ฐ ๋ง๋๋ ์ง์ ์ด๋ค.
์ธ๋ฑ์ค
๋ DBMS์ ์ ์ฅ ์ฑ๋ฅ์ ํฌ์ํ๊ณ ๊ฒ์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ๋ง๋ค์ด์ง ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
์ธ๋ฑ์ค์ ๋ชฉ์ RDBMS์ ๊ฒ์ ์๋๋ฅผ ๋์ด๋๋ฐ ์๋ค.
Index๋ฅผ ํด๋น ์ปฌ๋ฌ์ ์ฃผ๊ฒ ๋๋ฉด ์ด๊ธฐ Table ์์ฑ์, FRM
,MYD
,MYI
3๊ฐ์ ํ์ผ์ด ๋ง๋ค์ด์ง๋ค.
- FRKM: ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ์ ์ฅ๋์ด ์๋ ํ์ผ
- MYD: ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ํ์ผ
- MYI: Index ์ ๋ณด๊ฐ ๋ค์ด์๋ ํ์ผ
index๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ, MYI
ํ์ผ์ ๋น์ด์ ธ ์๋ค.
๊ทธ๋ฌ๋ index๋ฅผ ํด๋น ์ปฌ๋ผ์ ๋ง๋ค๊ฒ ๋๋ฉด ํด๋น ์ปฌ๋ผ์ ๋ฐ๋ก ์ธ๋ฑ์ฑํ์ฌ MYI
ํ์ผ์ ์
๋ ฅํ๋ค.
์ดํ์ ์ฌ์ฉ์๊ฐ SELECT
์ฟผ๋ฆฌ๋ก index๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ ์ ํด๋น Table์ ๊ฒ์ํ๋ ๊ฒ์ด ์๋๋ผ MYI
ํ์ผ์ ๋ด์ฉ์ ๊ฒ์ํ๋ค.
๋ง์ฝ, index๋ฅผ ์ฌ์ฉํ์ง ์์ SELECT
์ฟผ๋ฆฌ๋ผ๋ฉด ํด๋น Table Full Scanํ์ฌ ๋ชจ๋ ๊ฒ์ํ๋ค.
์ด๋ ์ฑ ๋ท ๋ถ๋ถ์ <์ฐพ์๋ณด๊ธฐ>์ ๊ฐ์ ์๋ฏธ๋ก ์ ๋ฆฌํด๋ ๋จ์ด ์ค์์ ์ํ๋ ๋จ์ด๋ฅผ ์ฐพ์์ ํ์ด์ง ์๋ฅผ ๋ณด๊ณ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ ๊ฐ๋ ๊ณผ ๊ฐ๋ค. ๋ง์ฝ ์ด <์ฐพ์๋ณด๊ธฐ>๊ฐ ์๋ค๋ฉด ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์ฐพ์์์ผํ ๊ฒ์ด๋ค.
์์
SELECT *
FROM EMP
WHERE empno = 7902
๋ฐ์ดํฐ ํ์ผ์ ๋ธ๋ก์ด 10๋ง๊ฐ ์ผ๋, ์ SQL๋ฌธ์ ์ํ ์์
- ์๋ฒ ํ๋ก์ธ์ค๊ฐ ํ์ฑ ๊ณผ์ ์ ๋ง์น ํ
DB buffer cache
์ empno๊ฐ 7902์ธ ์ ๋ณด๊ฐ ์๋์ง ํ์ธํ๋ค. - ์ ๋ณด๊ฐ ์์ผ๋ฉด
ํ๋ ๋์คํฌ ํ์ผ
์์ 7902์ ๋ณด๋ฅผ ๊ฐ์ง ๋ธ๋ก์ ๋ณต์ฌํด์DB buffer cache
๋ก ๊ฐ์ ธ์จ ํ 7900 ์ ๋ณด๋ง ๊ณจ๋ผ๋ด์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค
์ด๋ index ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ฐ
- index ์๋ ๊ฒฝ์ฐ: 7902 ์ ๋ณด๊ฐ ์ด๋ค ๋ธ๋ก์ ๋ค์ด์๋์ง ๋ชจ๋ฅด๋ฏ๋ก 10๋ง๊ฐ ์ ๋ถ
DB buffer cahce
๋ก ๋ณต์ฌํ ํ ํ๋ํ๋ ์ฐพ๋๋ค. - index ์๋ ๊ฒฝ์ฐ: WHERE ์ ์ ์ปฌ๋ผ์ index๊ฐ ๋ง๋ค์ด์ ธ ์๋์ง ํ์ธ ํ, ์ธ๋ฑ์ค์ ๊ฐ์ 7902 ์ ๋ณด๊ฐ ์ด๋ค
ROWID
๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ ํ ํด๋นROWID
์ ์๋ ๋ธ๋ก๋ง ์ฐพ์๊ฐ์DB buffer cache
์ ๋ณต์ฌํ๋ค.
- ํค ๊ฐ์ ๊ธฐ์ด๋ก ํ์ฌ ํ ์ด๋ธ์์ ๊ฒ์๊ณผ ์ ๋ ฌ ์๋๋ฅผ ํฅ์์ํจ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ ํ์ ๊ณ ์ ์ฑ์ ๊ฐํ์ํฌ ์ ์๋ค.
- ์ ๋ฐ์ ์ธ ์์คํ ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
- ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด .mdb ํ์ผ ํฌ๊ธฐ๊ฐ ๋์ด๋๋ค.
- ์ฌ์ฉ์๊ฐ ํ ํ์ด์ง๋ฅผ ๋์์ ์์ ํ ์ ์๋ ๋ณํ์ฑ์ด ์ค์ด๋ ๋ค.
- ์ธ๋ฑ์ค๋ ํ๋์์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ(
UPDATE
)ํ๊ฑฐ๋ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐ(INSERT
) ๋๋ ์ญ์ (DELETE
) ํ ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.- ๋ง์ฝ INSER, DELETE, UPDATE๊ฐ ๋น๋ฒํ ์์ฑ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ๋น๋ํด์ ธ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
- ๋ง์ฝ ์ด๋ค ํ ์ด๋ธ์ UPDATE์ DELETE๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ค๋ฉด ์ค์ ๋ฐ์ดํฐ๋ 10๋ง ๊ฑด์ด์ง๋ง, ์ธ๋ฑ์ค๋ 100๋ง ๊ฑด์ด ๋์ด๊ฐ๊ฒ ๋์ด SQL๋ฌธ ์ฒ๋ฆฌ ์ ๋น๋ํด์ง ์ธ๋ฑ์ค์ ์ํด ์คํ๋ ค ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ ๋๋ ๊ฒ์ด๋ค.
- ์ธ๋ฑ์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต๊ฐ์ ์ฐจ์งํด ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ด ํ์ํด์ง๋ค. (๋ฐ์ดํฐ๋ฒ ์ด์ค์ 10% ๋ด์ธ์ ๊ณต๊ฐ์ด ์ถ๊ฐ๋ก ํ์)
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ด ์์ฃผ ์ผ์ด๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์์ฑํด์ผ ํ ํ์๊ฐ ์๊ธฐ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ ํ๋๋ฅผ ์ธ๋ฑ์คํด์ผ ํ๋์ง ๋ฏธ๋ฆฌ ์ํํด๋ณด๊ณ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ข๋ค. ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ฟผ๋ฆฌ ์๋๊ฐ 1์ด ์ ๋ ๋นจ๋ผ์ง์ง๋ง, ๋ฐ์ดํฐ ํ์ ์ถ๊ฐํ๋ ์๋๋ 2์ด ์ ๋ ๋๋ ค์ง๊ฒ ๋์ด ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ ์ฝ๋ ์ ๊ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋, ๋ค๋ฅธ ํ๋์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์ฑ๋ฅ์ด ๋ณ๋ก ํฅ์๋์ง ์์ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด, ํ ์ด๋ธ์ ํ์ฌ ์ด๋ฆ ํ๋์ ์ฑ ํ๋๊ฐ ์ด๋ฏธ ์ธ๋ฑ์ค๋ ๊ฒฝ์ฐ์ ์ฐํธ ๋ฒํธ๋ฅผ ํ๋๋ก ์ถ๊ฐํด ์ธ๋ฑ์ค์ ํฌํจํด๋ ์ฑ๋ฅ์ด ๊ฑฐ์ ํฅ์๋์ง ์๋๋ค. ๋ง๋๋ ์ฟผ๋ฆฌ์ ์ข ๋ฅ์ ๊ด๊ณ ์์ด ๊ฐ์ฅ ๊ณ ์ ํ ๊ฐ์ ๊ฐ๋ ํ๋๋ง ์ธ๋ฑ์คํด์ผ ํ๋ค.
- ๊ท๋ชจ๊ฐ ์์ง ์์ ํ ์ด๋ธ
INSERT
,UPDATE
,DELETE
๊ฐ ์์ฃผ ๋ฐ์ํ์ง ์์ ColumnWHERE
์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ Column์ธ๋ํค
๊ฐ ์ฌ์ฉ๋๋ ColumnJoin
์ ์์ฃผ ์ฌ์ฉ๋๋ Column- ๋ฐ์ดํฐ์ ์ค๋ณต๋๊ฐ ๋ฎ์ ์ปฌ๋ผ (์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ปฌ๋ผ)
- ์๋ฅผ ๋ค์ด ์ฑ๋ณ์ด๋ผ๋ ์ปฌ๋ผ์ด ์๋ค๊ณ ํ์. (์ฑ๋ณ์ ๋จ์์ ์ฌ์๋ง ์๋ค๊ณ ๊ฐ์ )
- ์ด๋ ์ฑ๋ณ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด ๋ดค์ ํ์ํ ์ ์๋ ๊ฐ์ด 2๊ฐ ๋ฐ์ ์์ผ๋ฏ๋ก ํ๋์ ์ฑ๋ณ์ด ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ ์์ผ๋ฉด Full Scan์ ํ ์๋ ์๋ค.
- ๋ํ, ์ธ๋ฑ์ค๋ ๋ด๋ถ์ ์ผ๋ก Key, Value์ ํธ๋ฆฌ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ, Key๊ฐ ์ค๋ณต๋์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๋ฉด ๊ฒ์ํ ๋์์ด ์ฆ๊ฐํ๋ค.
- ์ด๋ฌํ ์ด์ ๋ก ๋ฐ์ดํฐ์ ์ค๋ณต๋๊ฐ ๋ฎ์์ ๋ถํฌ๋๊ฐ ๋์ ์ปฌ๋ผ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- Data ์ค๋ณต๋๊ฐ ๋์ Column
DML
์ด ์์ฃผ ์ผ์ด๋๋ Column
INSERT: ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ DELETE: ์ญ์ ํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ์์ ์ ์งํํจ UPDATE: ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฒ๋ฆฌํ๊ณ , ๊ฐฑ์ ๋ ๋ฐ์ดํฐ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ
INSERT
- indext split : ์ธ๋ฑ์ค์ Block๋ค์ด ํ๋์์ ๋๊ฐ๋ก ๋๋์ด์ง๋ ํ์.
- ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๊ฐ ์์๋๋ก ์ ๋ ฌ๋์ด์ผ ํ๋ค. ๊ธฐ์กด ๋ธ๋ก์ ์ฌ์ ๊ณต๊ฐ์ด ์๋ ์ํฉ์์ ๊ทธ ๋ธ๋ก์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ด์ผ ํ ๊ฒฝ์ฐ, ์ค๋ผํด์ด ๊ธฐ์กด ๋ธ๋ก์ ๋ด์ฉ ์ค ์ผ๋ถ๋ฅผ ์ ๋ธ๋ก์๋ค๊ฐ ๊ธฐ๋กํ ํ, ๊ธฐ์กด ๋ธ๋ก์ ๋น ๊ณต๊ฐ์ ๋ง๋ค์ด์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ค.
- ์ฑ๋ฅ๋ฉด์์ ๋งค์ฐ ๋ถ๋ฆฌํ๋ค.
- Index split์ ์๋ก์ด ๋ธ๋ก์ ํ ๋น๋ฐ๊ณ Key๋ฅผ ์ฎ๊ธฐ๋ ๋ณต์กํ ์์ ์ ์ํํ๋ค. ๋ชจ๋ ์ํ ๊ณผ์ ์ด Redo์ ๊ธฐ๋ก๋๊ณ ๋ง์ ์์ Redo๋ฅผ ์ ๋ฐํ๋ค.
- Index split์ด ์ด๋ฃจ์ด์ง๋ ๋์ ํด๋น ๋ธ๋ก์ ๋ํด ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋๋ฏ๋ก DML์ด ๋ธ๋กํน๋๋ค.
DELETE
- ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๊ฐ Delete๋ ๊ฒฝ์ฐ, ์ง์์ง๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ๊ทธ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
- index์์ ๋ฐ์ดํฐ๊ฐ delete๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ์ง์์ง์ง ์๊ณ ์ฌ์ฉ ์๋จ ํ์๋ง ํด๋๋ค.
- ์ฆ, ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ 1๋ง๊ฑด ์๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์๋ 2๋ง๊ฑด์ด ์์ ์ ์๋ค๋ ๋ป์ด๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด๋ ์ํ ์๋๋ฅผ ๊ธฐ๋ํ๊ธฐ ํ๋ค๋ค.
UPDATE
- ์ธ๋ฑ์ค์๋ Update ๊ฐ๋ ์ด ์๋ค.
- ํ ์ด๋ธ์ update๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์์๋ delete๊ฐ ๋จผ์ ๋ฐ์ํ ํ ์๋ก์ด ์์ ์ insert ์์ ์ด ๋ฐ์ํ๋ค.
- delete์ insert ๋ ๊ฐ์ ์์ ์ด ์ธ๋ฑ์ค์์ ๋์์ ์ผ์ด๋ ๋ค๋ฅธ DML๋ณด๋ค ๋ ํฐ ๋ถํ๋ฅผ ์ฃผ๊ฒ ๋๋ค
ํ ์ด๋ธ์ ์ผ๋ถ ๋ ์ฝ๋์๋ง ์์ธ์คํด์ ์ฝ์ด๋ค์
EXPLAIN SELECT * FROM item WHERE id BETWEEN 1 AND 10
์ ์: ์ธ๋ฑ์ค ๋ฃจํธ ๋ธ๋ก์์ ๋ฆฌํ ๋ธ๋ก๊น์ง ์์ง์ ์ผ๋ก ํ์ํ ํ์ ๋ฆฌํ ๋ธ๋ก์ ํ์ํ ๋ฒ์๋ง ์ค์บํ๋ ๋ฐฉ์
- B Tree ์ธ๋ฑ์ค์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ์ค ๋ฐฉ์
-
๋ฃจํธ๋ ธ๋๋ถํฐ ๋น๊ต๋ฅผ ์์ํด ๋ฆฌํ๋ ธ๋์ ๋๋ฌํ์ฌ ์์์ง์ ์ ์ฐพ๋๋ค. ๊ทธ ํ ๋ฆฌํ๋ ธ๋์ ๋ ์ฝ๋๋ง ์์๋๋ก ์ญ ์ฝ๋๋ค. ๋ง์ฝ ์ค์บํ๋ค๊ฐ ๋ฆฌํ๋ ธ๋์ ๋๊น์ง์ฝ์ผ๋ฉด ๋ฆฌํ๋ ธ๋๊ฐ์ ๋งํฌ๋ฅผ ์ด์ฉํด ๋ค์ ๋ฆฌํ๋ ธ๋๋ฅผ ์ฐพ์์ ๋ค์ ์ค์บํ๋ค.
-
์ด ๋ ์ค์ํ ๊ฒ์ ๋ฆฌํ ๋ ธ๋์ ์ ์ฅ๋ ๋ ์ฝ๋ ์ฃผ์๋ก ๋ฐ์ดํฐํ์ผ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค๋๋ฐ ๋ ์ฝ๋ ํ๊ฑด ํ๊ฑด ๋จ์๋ก ๋๋ค I/O๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ํด๋น ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ฐพ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ค์ง๋ ์์ง๋ง, ๋๋ค I/O์๋ ๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ๋ค..
-
- ์ธ๋ฑ์ค๋ฅผ ์ค์บํ๋ ๋ฒ์๋ฅผ ์ผ๋ง๋งํผ ์ค์ผ ์ ์๋๋์ ํ ์ด๋ธ๋ก ์์ธ์คํ๋ ํ์๋ฅผ ์ผ๋ง๋งํผ ์ค์ผ์ ์๋๋
- ๋ฃจํธ ๋ ธ๋ -> ๋ธ๋์น ๋ ธ๋ -> ๋ฆฌํ ๋ ธ๋ ์์ผ๋ก ํ์
- ๋ฆฌํ ๋ ธ๋์์ ์์ํ ์ง์ ์ ์ฐพ์ผ๋ฉด, ๊ทธ ๋ค์๋ถํฐ๋ ๋ฆฌํ ๋ ธ๋์ ๋ ์ฝ๋๋ง ์์๋๋ก ์ฝ์ผ๋ฉด ๋๋ค.
- ๋ฆฌํ ๋ ธ๋์ ๋๊น์ง ์ฝ์ผ๋ฉด ๋ฆฌํ ๋ ธ๋๊ฐ์ ๋งํฌ๋ฅผ ํตํด ๋ค์ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ์์ ์ค์บํ๋ค.
- ์ต์ข
์ ์ผ๋ก ์ค์บ ์ข
๋ฃ ์ง์ ์ ์ฐพ์ผ๋ฉด ์ง๊ธ๊น์ง ์ฝ์ ๋ ์ฝ๋๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ข
๋ฃํ๋ค.
- ๋ฐ์ดํฐ ํ์ผ์์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ฌ ๋ ๋ ์ฝ๋ ํ๊ฑด๋ง๋ค
๋๋คI/O
๊ฐ ๋ฐ์ํ๋ค. - ๊ทธ๋์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์ ์ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค๊ณ ํ๋ ๊ฒ์ด๋ค.
- ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฒด์ 20%~25%๋ฅผ ๋์ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ
ํ ์ด๋ธ ์ค์บ ๋ฐฉ์
์ด ๋ ํจ์จ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋๋ค.
- ๋ฐ์ดํฐ ํ์ผ์์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ฌ ๋ ๋ ์ฝ๋ ํ๊ฑด๋ง๋ค
- ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ MYSQL์์ ์คํ๊ณํ์ ๋ณผ๋
range
๋ก ๋์์๋ค. - ์ฃผ๋ก,
<, >, IS NULL, BETWEEN, IN, LIKE
๋ฑ์ ์ฐ์ฐ์ ์ด์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉ๋๋ค. - ๋ณดํต, DBA ๋ ์๊ธฐํ ๋
const, ref, range
์ ๊ทผ ๋ฐฉ๋ฒ์ ๊ตฌ๋ถํด์ ์๊ธฐํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๊ณ ์ด ์ธ๊ฐ์ง๋ฅผ ํตํ์ด์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ ๋๋ ๋ ์ธ์ง ์ค์บ์ด๋ผ๊ณ ๋งํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค. - Index Range Scan ์ ์ฌ์ฉํ๋ ค๋ฉด ์ ๋ ์ปฌ๋ผ์ ๊ฐ๊ณตํ์ง ์์ ์ํ๋ก ์กฐ๊ฑด์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
ํ ์ด๋ธ์ ํฌํจ๋ ๋ ์ฝ๋๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ์ด๋ค์ธ๋ค.
- ์ธ๋ฑ์ค ํ ์ค์บ์ ์ธ๋ฑ์ค์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ์ฝ๋ ๋ฐฉ์์ ๋งํ๋ค.
- ๋ํ์ ์ผ๋ก ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ด ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํ ์ค์บ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ์์ง์ ํ์ ์์ด ์ธ๋ฑ์ค ๋ฆฌํ ๋ธ๋ก์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ์
- ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ณด๋ค ํจ์ฌ ์๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค ๋น ๋ฅธ ๋ฐฉ์์ด๋ค.
- ์ต์ ์ ์ธ๋ฑ์ค๊ฐ ์์ ๋ ์ฐจ์ ์ผ๋ก ์ ํ
- ์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ์ด ์กฐ๊ฑด์ ์ ์์ผ๋ฉด Table Full Scan์ ๊ณ ๋ คํ๋, Table Full Scan๋ณด๋ค I/O๋ฅผ ์ค์ผ ์ ์๊ฑฐ๋ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ฒ ์ป์ ์ ์์ ๊ฒฝ์ฐ Index Full Scan ์ ํ
- ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ sort ์ฐ์ฐ ๋์ฒด :
first_rows
- ์ ์ฒด ์งํฉ ์ค ์ฒ์ ์ผ๋ถ๋ง์ ๋น ๋ฅด๊ฒ ๋ฆฌํดํด์ผํ๋ฏ๋ก ์ตํฐ๋ง์ด์ ๋ ์ ๋ต์ ์ผ๋ก Index Full Scan ์ํ
- ๋ง์ฝ ๊ฒฐ๊ณผ ์งํฉ์ด ๋ง์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ฝ๊ธฐ๋ฅผ ๋ฉ์ถ์ง ์๊ณ ๋๊น์ง fetchํ๋ค๋ฉด ์ธ๋ฑ์ค ์ค์บ์ด ํ ์ด๋ธ ์ค์บ๋ณด๋ค ๋ถ๋ฆฌ : ๋ง์ I/O๋ฅผ ์ผ์ผํค๋ฉด์ ์๋ฒ ์์์ ๋ญ๋น ์ด๋
ํ ์ด๋ธ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋ฉด์ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด ๊ฒฐ๊ณผ๋ก ์ถ์ถํ๊ณ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ก๋ค์ ์๋ก ์ธ์ ๋์ด ์๊ธฐ ๋๋ฌธ์, Full Table Scan์ ํ๋ฒ์ I/O์ ์ฌ๋ฌ ๋ธ๋ก์ ์ฎ๊ฒจ์จ๋ค.
์ฆ ํ๋ฒ์ I/O์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ค ๋ธ๋ก ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์, row ๋น ์์๋๋ ์
์ถ๋ ฅ ๋น์ฉ์ด ์ธ๋ฑ์ค ์ค์บ์ ๋นํด ์ ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ฎ๊ฒจ์ง ๋ธ๋ก๋ค์ ์์ฐจ์ ์ผ๋ก ์ฝํ๋ค.
์ญํ ๋ณ
- ํด๋ฌ์คํฐ ์ธ๋ฑ์ค
- ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค(PK)์ ๋ํด ์ ์ฉ๋๋ ์ธ๋ฑ์ค
- ๋นํด๋ฌ์คํฐ ์ธ๋ฑ์ค
- ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค ์ธ์ ๋ค๋ฅธ ์ปฌ๋ผ์ ์ ์ฉ๋ ์ธ๋ฑ์ค
- ์ ๋ํฌ ์ธ๋ฑ์ค
- ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ ์๋์ง๋ง, ์ค๋ณต์ ํ์ฉํ์ง ์๋ Unique ์์ฑ์ด ๋ค์ด๊ฐ ์ปฌ๋ผ์ ์ ์ฉ๋ ์ธ๋ฑ์ค
- ์ฐธ๊ณ ๋ก
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค
๋์ ๋ํฌ ์ธ๋ฑ์ค + Not Null
์์ฑ์ ๋๊ณ ์๋ค. - ์ ๋ํฌ ์ธ๋ฑ์ค๋ ํ๊บผ๋ฒ์ ๋นํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ก ๋ณด๊ธฐ๋ ํ๋ค.(๊ธฐ๋ณธ ํค๋ ์๋๋ฏ๋ก)
๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์ ๋ณ
- B-Tree ์ธ๋ฑ์ค
- R-Tree ์ธ๋ฑ์ค
- Hash ์ธ๋ฑ์ค
- Fractal-Tree ์ธ๋ฑ์ค
- Merge ์ธ๋ฑ์ค
์ฃผ๋ก B-Tree, R-Tree, Hash ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ ์ค๋ณต ํ์ฉ ์ฌ๋ถ ๋ณ
- ์ ๋ํฌ(Unique) ์ธ๋ฑ์ค
- ๋ ผ ์ ๋ํฌ(Non-Unique) ์ธ๋ฑ์ค
๊ธฐ๋ฅ ๋ณ
- ์ ๋ฌธ ๊ฒ์์ฉ ์ธ๋ฑ์ค
- ๊ณต๊ฐ ๊ฒ์์ฉ ์ธ๋ฑ์ค
ํ๋์ฉ ์ดํด๋ณด์ ๐ค
PK ๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ ์๋ณ์๋ฅผ ์๋ฏธํ๋ค. ํ ์ด๋ธ์์ PK ๋ฅผ ์์ฑํ๋ฉด Index ์ PK ์ ๊ดํ ์ธ๋ฑ์ค๊ฐ ์๊ธด๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ, PK ๋ ๋ ์ฝ๋๋ฅผ ๋ํํ๋ ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ธ๋ฑ์ค๋ฅผ ์๋ฏธํ๋ค.
PK ๋ฅผ ์ ์ธํ ๋๋จธ์ง์ ์ธ๋ฑ์ค๋ค์ Secondary Index ๋ผ๊ณ ํ๋ค
clustered: ๊ตฐ์งํ clustered index: ๊ตฐ์งํ ๋ ์ธ๋ฑ์ค
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅ ๋๋ ์์๋ฅผ ์ ์(์ค์ )ํ๋ค.
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ๋ํด์๋ง ์ ์ฉ๋๋ ๋ด์ฉ์ด๋ค.
๋ฐ์ดํฐ๊ฐ ํ
์ด๋ธ์ ์ฝ์
๋๋ ์์์ ์๊ด์์ด Index
๋ก ์์ฑ๋์ด ์๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด ์ฝ์
๋๋ค.
์์๋ ์ค์ง ํ๋์ ์ปฌ๋ผ์ผ๋ก ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๋ค๋ฉด ์ดํ์ ๋ชจ๋ ์ปฌ๋ผ์ ํ ์นธ์ฉ ์ด๋์์ผ์ค์ผํ๋ค. index๊ฐ ๊ตฐ์งํ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค์์๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ ์ํด ๋ ์ฝ๋์ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋๋ฉฐ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น ๋ํ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ์ ์คํ๊ฒ ๊ฒฐ์ ํ๊ณ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ๋น ํ ๊ฐ๋ง ์์ฑํ ์ ์๋ค. - ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ๋ํด์๋ง ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค, ์ด์ ๋ฐํด non ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ๋น ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ ์ ์๋ค.
Clustered ์ธ๋ฑ์ค์ ๊ตฌ์กฐ์ด๋ค. Data Page ์ ๋ฐ์ดํฐ๋ค์ด ์์ฐจ์ ์ผ๋ก ์ ๋ ฌ๋์ด์๋ค. ๊ทธ๋ฆฌ๊ณ Leaf level ๊ณผ DataPage๊ฐ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
-
Clustered Index๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์์ด ๊ฒ์ ์๋๊ฐ Non-Clustered Index๋ณด๋ค ๋ ๋น ๋ฅด๋ค.
-
๋ฐ์ดํฐ์ ์ ๋ ฅ/์์ /์ญ์ ์์๋ ์ ๋ ฌ์ ์ํํ์ฌ ์ ๋ ฅ/์์ /์ญ์ ์๋๋ ๋ ๋๋ฆฌ๋ค.
- ํ๋ผ์ด๋จธ๋ฆฌ ํค๊ฐ ์์ผ๋ฉด PK ๋ฅผ ํด๋ฌ์คํฐ ํค๋ก ์ ํ
- NOT NULL ์ต์ ์ ์ ๋ํฌ ์ธ๋ฑ์ค ์ค์์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ํด๋ฌ์คํฐ ํค๋ก ์ ํ
- ์๋์ผ๋ก ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ง๋๋ก ์ฆ๊ฐ๋๋ ์ปฌ๋ผ์ ๋ด๋ถ์ ์ผ๋ก ์ถ๊ฐํ ํ, ํด๋ฌ์คํฐ ํค๋ก ์ ํ
๋ฐ๋ผ์, PK ๋ Unique Index ๊ฐ ์์ผ๋ฉด ๋ด๋ถ์ ์ผ๋ก ์์ฑํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ง ๋๊ธฐ ๋๋ฌธ์ ํด๋น ํค๊ฐ ์ฌ์ฉ์์ ๋ ธ์ถ๋์ง ์์ผ๋ฏ๋ก, ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ํํ์ ๋ณผ ์ ์๋ค.
์๋ฅผ๋ค์ด, PK ๊ฐ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ก ์กํ์๋ค๊ณ ํด๋ณด์.
@Id
private Long jumin;
PK ๊ฐ ์ฃผ๋ฏผ๋ฑ๋ก ๋ฒํธ๋ก ์ก๊ฒ๋๋ฉด DB ์ฑ๋ฅ ์ด์๊ฐ ์๊ธธ ์ ์๋ค.
- ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ํน์ง์ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋๋ฐ, ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ PK ์ ๋ฑ๋ก, ๋ณ๊ฒฝ์ ์์ด ๋๋ฆฌ๋ค๊ณ ํ์๋ค.
- ์ฆ, AUTO_INCREMENT ๋ก ๋์ด์์ง ์์ผ๋ฉด ํ์์ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ์ ๋ฐ๋ผ์ PK ์์น ์กฐ์ ์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์, jumin ์ ์ ๋ํฌ ํค๋ก ์ก๊ณ , PK ๋ฅผ ์ธ์กฐํค๋ก ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
์ธ์กฐํค: ์ธ์์ ์ผ๋ก ๋ถ์ฌํ ๋ฒํธ๋ก ๊ณ ์ ์๋ณ์ Oracle sequence, Mysql auto Increment๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๋ ผ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์ ์ฅ ๋ ๋ฌผ๋ฆฌ์ ์ธ ์์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ์ง ์๋๋ค. ์ฆ, ์์๋๋ก ์ ๋ ฌ๋์ด ์์ง ์๋ค.
๋ ผ ํด๋ฌ์คํฐ ํ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ๋ฐ์ดํฐ์ ํจ๊ป ํ ์ด๋ธ์ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ ๋ณ๋์ ์ฅ์์ ์ ์ฅ๋๋ค.
๋ ผ ํด๋ฌ์คํฐ ํ์ ์์๋ ์๋์ ๊ฐ๋ค. NonClustered ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ํ์ ๋ ๋ฆฝ์ ์ด๋ฉฐ, ์ธ๋ฑ์ค ํค ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์กด์ฌํ๋ค.
ํ ์ด๋ธ์ ID ํค ๊ฐ๊ณผ ํฌ์ธํฐ์ธ Address๋ฅผ ํตํด ์ค์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ค.
id:4์ ํด๋นํ๋ ๊ฐ์ ์ด๋ฆ์ ์๊ณ ์ถ๋ค๋ฉด 120๋ฒ์ง๋ก ์ด๋ํ๊ณ , name์ ํ์ธํ๋ฉด ๋๋ค. clustered์์ ์ฐจ์ด๋ ์์ฐจ์ ์ผ๋ก index๊ฐ ์ ๋ ฌ๋์์ง ์๋ค๋ ์ ์ด๋ค. ๋ ผ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋นํด์ ๊ฒ์ ์๋๋ ๋๋ฆฐ ๋ฐ๋ฉด์, CUD ์๋๋ ๋น ๋ฅด๋ค.
-
B-Tree ์ ๋ฆฌํ ๋ ธ๋ ์ฒ๋ผ ๋ ธ๋ ์์ฒด๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋๊ณ , ๋ฆฌํ ๋ ธ๋์์๋ ๋ฐ์ดํฐ๊ฐ ์์นํ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํํ.
-
Clustured ๊ตฌ์กฐ์๋ ๋ค๋ฅด๊ฒ Leaf Level๊ณผ Data Page๊ฐ ๊ตฌ๋ถ๋๋ค. ๊ทธ๋ฆฌ๊ณ Data Page์ ๋ฐ์ดํฐ๋ ์ ๋ ฌ ๋์ด์์ง ์๋ค.
- Clustered ์ธ๋ฑ์ค๋ ํ ์ด๋ธ๋น ์ค์ง ํ๊ฐ๋ง ์กด์ฌํ๋ค. ๋ฐ๋ฉด์ Non-Clustered ํ์ ํ ์ด๋ธ ๋น ์ฌ๋ฌ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์๋ค.
- Clustered ์ธ๋ฑ์ค๋ ์ค์ง ํ ์ด๋ธ์ ์ ๋ ฌํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ณ๋์ ๊ณต๊ฐ์ ํ์๋กํ์ง ์๋๋ค. Non-Clustered ์ธ๋ฑ์ค๋ ์ ์ฅ๋๋ ๋ณ๋์ ๊ณต๊ฐ(์ฝ 10%)์ด ํ์ํ๋ค.
- Clustered ์ธ๋ฑ์ค๋ ํต์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ฐ ์ถ๊ฐ์ ์ธ ์คํ ์ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ Non-Clustered ์ธ๋ฑ์ค๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
- Clustered ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋, ๋ชจ๋ ํ ์ด๋ธ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ค์ ์์๋ฅผ ์ ์งํด์ผํ๋ฏ๋ก ๋ง์ ๋น์ฉ์ด ๋ฐ์ํ๋ค. Non-Clustered๋ ๋ณ๋์ ๊ณต๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ผํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์์ ์ด ํ์ํ๋ค.
B-+Tree Index ๋ ๊ฐ์ฅ ์ค๋์ ์ ๋์ ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ ์ธ๋ฑ์ค ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํธ๋ฆฌ์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ๋ฐ์ดํฐ ์ ๊ทผ ํผํฌ๋จผ์ค๊ฐ ๋ฐ์ดํฐ ์ฆ๊ฐ๋์ ๋ฐ๋ผ์ ๊ฒฐ์ฝ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ์ง ์๋๋ค๋ ์ ์ด๋ค.
B-Tree ์ B ๋ Binary ๊ฐ ์๋ Balanced ๋ฅผ ์๋ฏธํ๋ค.
B-Tree๋ ์ด์งํธ๋ฆฌ์ ๋ค๋ฅด๊ฒ ํ๋์ ๋ ธ๋์ ๋ง์ ์์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์๋ค. ์ต๋ M๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋ B Tree๋ฅผ M์ฐจ B-Tree๋ผ๊ณ ํ๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ
์ฒ๋ผ ๊ฐ key๋ค์ ์ผ์ชฝ ์์๋ค์ ํญ์ key
๋ณด๋ค ์์ ๊ฐ์, ์ค๋ฅธ์ชฝ ๊ฐ์ ํฐ ๊ฐ์ ๊ฐ์ง๋ค.
*key ์ฝ์ ๊ณผ์ ๐ 1. ๋ถํ ์ด ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ
- ๋ฆฌํ ๋ ธ๋๊ฐ ๊ฐ๋์ฐจ์ง ์์๋ค๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก k๋ฅผ ์ฝ์ ํ๋ค.
๐ 2.. ๋ถํ ์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ
- ๋ง์ผ ๋ฆฌํ๋ ธ๋์ key ๋ ธ๋๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ, ๋ ธ๋๋ฅผ ๋ถํ ํด์ผ ํ๋ค.
B-Tree ๊ตฌ์กฐ์ ์ ์ฌํ์ง๋ง ๋ค๋ฅธ์ ์ ๋ฆฌํ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํํ๋ฅผ ๋์ด ์ ํ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ ์ธ๋ฑ์ฑ์
B+Tree
๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
-
๋ชจ๋ key, data๊ฐ ๋ฆฌํ๋ ธ๋์ ๋ชจ์ฌ์์ต๋๋ค. Bํธ๋ฆฌ๋ ๋ฆฌํ๋ ธ๋๊ฐ ์๋ ๊ฐ์ key๋ง๋ค data๋ฅผ ๊ฐ์ง๋ค๋ฉด, B+ํธ๋ฆฌ๋ ๋ฆฌํ ๋ ธ๋์ ๋ชจ๋ data๋ฅผ ๊ฐ์ง๋๋ค.
-
๋ชจ๋ ๋ฆฌํ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํํ๋ฅผ ๋๊ณ ์์ต๋๋ค. Bํธ๋ฆฌ๋ ์์์๋ ๋ฆฌํ๋ ธ๋๋ฅผ ๊ฒ์ฌํ ๋, ๋ค์ ๋ฃจํธ๋ ธ๋๋ถํฐ ๊ฒ์ฌํด์ผ ํ๋ค๋ฉด, B+ํธ๋ฆฌ๋ ๋ฆฌํ๋ ธ๋์์ ์ ํ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์์ด ์๊ฐ๋ณต์ก๋๊ฐ ๊ต์ฅํ ์ค์ด๋ญ๋๋ค.
*key ์ฝ์ ๊ณผ์ ๐ 1. ๋ถํ ์ด ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ
- B-Tree์ ๋์ผ
๐ 2.. ๋ถํ ์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ
-
๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํ๋ณดํจ์ผ๋ก์จ ๋ ๋ง์ key๋ค์ ์์ฉํ ์ ์๋ค. ํ๋์ ๋ ธ๋์ ๋ ๋ง์ key๋ค์ ๋ด์ ์ ์๊ธฐ์ ํธ๋ฆฌ์ ๋์ด๋ ๋ ๋ฎ์์ง๋ค.(cache hit๋ฅผ ๋์ผ ์ ์์)
-
ํ ์ค์บ ์, B+tree๋ ๋ฆฌํ ๋ ธ๋์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์ ํํ์๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ B-tree์ ๋นํด ๋น ๋ฅด๋ค. B-tree์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ธํด์ผ ํ๋ค.
- ์ปฌ๋ผ์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋์ ๊ฐ์ ์ด์ฉํด ์ธ๋ฑ์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ
- Root Node, Branch Node(์ค๊ฐ ๋ ธ๋), Leaf Node๋ก ๊ตฌ์ฑ
- ๊ฐ ๋
ธ๋๋
ํ์ด์ง
๋ฅผ ์๋ฏธํ๋ค.- InnoDB์์ ํ์ด์ง๋ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ณธ ๋จ์๋ฅผ ์๋ฏธํ๋ค.
- ํ์ด์ง ๋๋ ๋ธ๋ก์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋์คํฌ์ ๋ชจ๋ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ ์ ์ต์ ๋จ์๊ฐ ๋๋ค.
- InnoDB Buffer Pool์์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๋ ๊ธฐ๋ณธ ๋จ์์ด๊ธฐ๋ ํ๋ค.
- ์ธ๋ฑ์ค๋ ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌ๋๋ค.
- ๋ชจ๋ ํ์ด์ง์ ํฌ๊ธฐ๋
16KB
๋ก ๊ณ ์ ๋์ด ์๋ค.
- Root Node์ Branch Node๋
์ธ๋ฑ์ค ๋ ์ฝ๋
์์์ ๋ ธ๋ ์ฃผ์
๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ Leaf Node๋์ธ๋ฑ์ค ๋ ์ฝ๋
์๋ ์ฝ๋ ์ฃผ์
๋ฅผ ๊ฐ์ง๊ณ ์๋ค.- ์ธ๋ฑ์ค ๋ ์ฝ๋๋ First Name์ด๋ผ๋ ์ปฌ๋ผ์ index๊ฐ ๊ฑธ๋ ค์์ ๋ ํด๋น ์ธ๋ฑ์ค์ ๋ํ ๋ ์ฝ๋ ๊ฐ์ ์๋ฏธํ๋ค.
Leaf Node ์ ๋ ์ฝ๋ ์ฃผ์๋ ์ค์ ํ ์ด๋ธ์ ์ ์ฅ๋์ด ์๋ ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
๋ ์ฝ๋ ์ฃผ์๋ DBMS ์ ์ข ๋ฅ๋ MySQL ์ ์คํ ๋ฆฌ์ง ์์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. Oracle ์ ๋ฌผ๋ฆฌ์ ์ธ ๋ ์ฝ๋ ์ฃผ์๊ฐ ์ ์ฅ๋๊ณ , MyISAM ์ ๋ด๋ถ์ ์ธ ๋ ์ฝ๋ ์์ด๋๊ฐ ์ ์ฅ๋๊ณ , InnoDB ๋ PK ๊ฐ ๋ ์ฝ๋ ์ฃผ์๋ก ์ฌ์ฉ๋๋ค.
ID | FISRT_NAME | LAST NAME | BIRTHDATE ...
1001 | Nick | Clo | 19901231 ...
๊ทธ๋ฆผ ์ฒ๋ผ ์ธ๋ฑ์ค์ ํค๊ฐ์ ์ ๋ ฌ์ด ๋์ด์๋ ๋ฐ๋ฉด์ ๋ฐ์ดํฐ ํ์ผ๋ค์ ๋๋คํ๊ฒ ์ ์ฅ๋์ด์๋ค.
- ๋ฐ์ดํฐ๊ฐ ์ญ์ ๊ฐ ๋์ง ์๋๋ค๋ฉด ๋ฐ์ดํฐ ํ์ผ๋ค์ ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋๊ฒ ์ง๋ง, ๋ฐ์ดํฐ ์ญ์ ๊ฐ ์ผ์ด๋๋ฉด DBMS ๋ ๋น ๊ณต๊ฐ์ ๋ค์ INSERT ๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ ๋ ์ฌํ์ฉํ๋๋ก ์ค๊ณ๋๊ธฐ ๋๋ฌธ์ ํญ์ INSERT ๋ ์์๋ก ์ ์ฅ๋๋ ๊ฒ์ ์๋๋ค.
๊ตฌ๋ถ | B-Tree | B+Tree |
---|---|---|
๋ฐ์ดํฐํฌ์ธํฐ | ๋ชจ๋ ๋ด๋ถ์ ์ธ ๋ ธ๋๋ค์ ๋ฐ์ดํฐ ํฌ์ธํฐ๋ฅผ ์ง๋ | ๋ฆฌํ ๋ ธ๋์๋ง ๋ฐ์ดํฐ ํฌ์ธํฐ๊ฐ ์กด์ฌ |
์ํ์ ์์ธ์ค ํ์ ๋ฐฉ์ | ๋ชจ๋ key๊ฐ ๋ฆฌํ๋ ธ๋์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํด์ผ ํจ | ๋ชจ๋ key๊ฐ ๋ฆฌํ๋ ธ๋์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํ ๋ ธ๋ ๋ ๋ฒจ์์ ํ์ํ๋ฉด ๋จ |
ํค ์ค๋ณต์ฌ๋ถ | ๋ชจ๋ ๋ ธ๋๋ ์๋ก ๋ค๋ฅธ key๋ฅผ ์ง๋ | ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ ๊ฐ์ key๋ฅผ ๊ฐ์ง ์ ์์ |
๋งํฌ๋ ๋ฆฌ์คํธ | ์กด์ฌํ์ง ์์ | ๋ฆฌํ ๋ ธ๋๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐ๋์ด ์์ |
B-Tree Index ๋ฅผ ์ด์ฉํ ์ธ๋ฑ์ค ํ์ ์์
์ ๋ฃจํธ ๋
ธํธ๋ถํฐ ์์ํ์ฌ ๋ธ๋์น ๋
ธ๋๋ฅผ ๊ฑฐ์ณ ๋ฆฌํ ๋
ธ๋๊น์ง ์ด๋ํ๋ฉด์ ๋น๊ต ์์
์ ์ํํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํธ๋ฆฌ ํ์(Tree traversal)
์ด๋ผ๊ณ ํ๋ค.
B-Tree ๋ ์ปฌ๋ผ์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ ๊ฐ์ ์ด์ฉํ๋ฏ๋ก, ํจ์๋ ์ฐ์ฐ์ ์ํ ๊ฒฐ๊ด๊ฐ์ ์ด์ฉํ์ฌ ์ ๋ ฌํ๊ฑฐ๋ ๊ฒ์ํ๋ ๊ฒฝ์ฐ์๋ B-Tree ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์์
์ด ํ
์ด๋ธ์์ ์ธ๋ฑ์ค ์์ด ID = 3
์ Searchํ๋ค๋ฉด,
๊ฐ์ฅ ์์ค 2๋ฒ ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ด 8๋ฒ์ ๋์์ ๊ฐ์ง ํ ๊ฐ์ ์ฐพ์ ์ ์์ ๊ฒ์ด๋ค.
ID ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ B-Tree
์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด ๋ณด๋ฉด
"ID=3"์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ๋๋ค๋ฉด, ์ด 3๋ฒ์ ๋์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
-
๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ธ๋ฑ์ค์ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ๋ถ๋ฅ๋์ด ์ ์ฅ๋๋ค.
-
3์ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํ ๋, Root Node๋ก ์ ๊ทผํ์ฌ ์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ํ์ธํ๋ค.
-
์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ํ์ธํ์์ ๋ 0๋ถํฐ 5๊น์ง๋ ํ์ด์ง 2์ ์ ์ฅ๋์ด์๋ค.
-
์ด์ Branch Node๋ก ๋ด๋ ค๊ฐ์, ํ์ด์ง 2๋ก ์ ๊ทผํ๋ค.
-
ํ์ด์ง 2์์ 3๋ถํฐ 5๊น์ง๋ ํ์ด์ง 5์ ์ ์ฅ๋์ด ์๋๊ฒ์ ํ์ธํ๋ค.
-
์ด์ Leaf Node๋ก ๋ด๋ ค๊ฐ์ ํ์ด์ง 5๋ก ์ ๊ทผํ๋ค.
-
Leaf Node์๋ ๋ค์ ํ์ด์ง๋ก ํฅํ๋ ๊ธธ์ด ์์ผ๋ฉฐ, ๋์คํฌ์ ์ ์ฅ๋์ด ์๋ ์ฃผ์๋ฅผ ์ฐพ์๊ฐ ์ ์๋ ์ฃผ์๊ฐ ์๋ค.
-
Leaf Node์์ '3'์ ์ฐพ๊ณ ๋ ์ฝ๋ ์ฃผ์ x9์ ํ์ฉํ์ฌ ๋์คํฌ์ ์๋ ๋ฐ์ดํฐ (ID 3, Name D)๋ฅผ ์ฐพ์๋ธ๋ค.
MySQL InnoDB ์์๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ ์ฝ๋๋ค์ด ํด๋ฌ์คํฐ๋์ด(Clustered) ๋์คํฌ์ ์ ์ฅ๋๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก PK ์์๋๋ก ์ ๋ ฌ๋์ด ์ ์ฅ๋๋ค. DBMS ์์๋ ํด๋ฌ์คํฐ๋ง ๊ธฐ๋ฅ์ด ์ ํ์ฌํญ์ด์ง๋ง InnoDB ์์๋ ๋ํดํธ๋ก ํด๋ฌ์คํฐ๋ง ํ ์ด๋ธ์ด ์์ฑ๋๋ค.
MySQL ์์ B-tree ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ B-tree ์์ฒด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์ ์ฅ๋ ๋ ์ฌ์ฉํ๋๋ก ์ค๊ณ ๋์ด์ง ํธ๋ฆฌ์ด๋ค. ๋์คํฌ์ ์ฝ์ , ์ญ์ , ์ฝ๋ ์๊ฐ์ RAM ๋ณด๋ค ํจ์ฌ ๋๋ฆฌ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ I/O ๋ ๋์คํฌ๋ฅผ ํตํด ๋ฌผ๋ฆฌ์ ์ธ ์์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋์๋ ์ฑ๋ฅ์ด ๋๋ฌด ๋ฎ์์ง์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ด์ง ํธ๋ฆฌ๋ ์ต์ ์ ๊ฒฝ์ฐ O(N) ์ ๊ฐ์ง๋ค. ๋ ๋ ๋ธ๋ ํธ๋ฆฌ ์์ฒด๋ ํจ์จ์ ์ด์ง๋ง ๋์ฉ๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ํธ๋ฆฌ์ ๋์ด๋ฅผ ์ ์ดํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด์๋ ํธ๋ฆฌ ๋ ธ๋ ๋ฃจํธ -> ๋ฆฌํ -> ๋ฐ์ดํฐ ์กฐํ ๋ฐฉ์์ผ๋ก ์กฐํ๋๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ์ ๋์ด๊ฐ ๋๋ค๋ฉด ๊ทธ ๋งํผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ์๋ชจ๋๋ค๋ ์๋ฏธ๊ฐ ๋ ์ ์๋ค.
๋ฐ๋ผ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค I/O ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ๊ธฐ ์ํด์ B-tree ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์๋์ ๊ทธ๋ฆผ์ Insert Buffer ์ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ํ๋ธ๋ค.
B-Tree ์ธ๋ฑ์ค
์ ์ธ๋ฑ์ค ํค ์ถ๊ฐ์ ๋ฐ์ํ๋ ๋์ ๊ณผ์ ์ ๋ณผ ์ ์๋ค.
- ์ฌ์ฉ์์ ์ฟผ๋ฆฌ ์คํ
InnoDB Buffer Pool
์ ์๋ก์ด ํค ๊ฐ์ ์ถ๊ฐํด์ผํ ํ์ด์ง(B-Tree Leaf Node)๊ฐ ์กด์ฌํ๋ค๋ฉด, ์ฆ์ ํค ์ถ๊ฐ ์์ ์ฒ๋ฆฌInnoDB Buffer Pool
์ ํ์ด์ง๊ฐ ์๋ค๋ฉดInsert Buffer
์ ์ถ๊ฐํ ํค ๊ฐ๊ณผ ๋ ์ฝ๋์ ์ฃผ์๋ฅผ ์์๋ก ๊ธฐ๋กํด๋๊ณ ์์ ์๋ฃ(์ฌ์ฉ์์ ์ฟผ๋ฆฌ๋ ์คํ ์๋ฃ๋จ)- ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ผ๋ก ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ์ฝ์ ๋๋ง๋ค
Insert Buffer
์ ๋จธ์งํด์ผํ ์ธ๋ฑ์ค ํค๊ฐ์ด ์๋์ง ํ์ธํ ํ ์์ผ๋ฉด ๋จธ์ง (B-Tree์ ์ธ๋ฑ์ค ํค์ ์ฃผ์๋ฅผ ์ง์ ) - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ์์์ ์ฌ์ ๊ฐ ์๊ธฐ๋ฉด
MySQL ์๋ฒ์ Insert Buffer Merge Thread
๊ฐ ์กฐ๊ธ์ฉInsert Buffer
์ ์์ ์ ์ฅ๋ ์ธ๋ฑ์ค ํค์ ์ฃผ์ ๊ฐ์ ๋จธ์ง์ํจ๋ค.
MySQL 5.1 ์ดํ ๋ฒ์ ์์๋ INSERT ์ ์ํ ์ธ๋ฑ์ค ํค ์ถ๊ฐ ์์ ๋ฐ ๋ฒํผ๋ง ์ง์ฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์๋๋ฐ MySQL 5.5 ์ด์ ๋ฒ์ ๋ถํฐ INSERT, DELETE ๋ฑ ์ ์ํ ์์ ๊น์ง ์ง์ํ๊ฒ ๋์๋ค. ๋ฐ๋ผ์ ์ด๋ฆ๋ ์ธ์ํธ ๋ฒํผ๋ง์์ ์ฒด์ธ์ง ๋ฒํผ๋ง์ผ๋ก ๋ฐ๋์๋ค. MySQL 5.5 ์ด์ ๋ฒ์ ๋ถํฐ๋ DBA ๊ฐ innodb_change_buffering ์ค์ ๊ฐ์ ์ด์ฉํด์ ํค ์ถ๊ฐ ์์ ๊ณผ ์ญ์ ์์ ์ค ์ด๋๊ฒ์ ๋จผ์ ์ง์ฐ ์ฒ๋ฆฌํ ์ง ์ค์ ํด์ผ ํ๋ค.
ํด์ ์ธ๋ฑ์ค๋ InnoDB ์์ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค(Adaptive Hash Index)
๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๊ณ , ์ค๋ผํด์์๋ ์กฐ์ธ์ ์ฌ์ฉ๋๋ค.
ํด์ ์ธ๋ฑ์ค๋ B-Tree ์ธ๋ฑ์ค์ ๋ฌ๋ฆฌ ๋ฒ์ผ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
-
์ฌ์ฉ์๊ฐ ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ ์ฃผ๋ฉด ํด์ ํจ์๋ฅผ ๊ฑฐ์ณ์ ์ฐพ๊ณ ์ ํ๋ ํค๊ฐ์ด ํฌํจ๋ ๋ฒ์ผ(Bucket)์ ์์๋ผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฒ์ผ ํ๋๋ง ์ฝ์ด์ ์ค์ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ๋ฐ๋ก ์ฐพ์ ์ ์๋ค.
- ํธ๋ฆฌ ๋ด์์ ์ฌ๋ฌ ๋ ธ๋๋ฅผ ์ฝ์ด์ผ ํ์ง๋ง ๋ ์ฝ๋์ ์ฃผ์๋ฅผ ์์ ๋ผ ์ ์๋ B-Tree ๋ณด๋ค ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์๋ค.
-
Hash index ๋ ์๋์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด ์๋ ํด์ ํจ์์ ๊ฒฐ๊ณผ๋ง์ ์ ์ฅํ๊ฒ ๋จ์ ๋ฐ๋ผ ํค ์ปฌ๋ผ ๊ฐ์ 4~8๋ฐ์ดํธ ์ ๋๋ก ์์ ๊ธธ์ด๋ก ์ค์ด ๋ค๊ฒ ๋๊ณ B-Tree ์ธ๋ฑ์ค์ ๋นํด ์๋นํ ์์ ํฌ๊ธฐ ์ด๋ค.
-
์ ๋ ฅํ ๊ฐ์ด ๋ค๋ฅด์ง๋ง ํด์๋ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.ํด์ ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฒ์๊ฐ ์ข์ผ๋ฉด ํ์ํ ๋ฒ์ผ์ ๊ฐ์๊ฐ ์ ์ด์ง๊ฒ ๋๋ฉด์ ์ถฉ๋ํ ์ ์๋ ํ์จ์ด ๋๊ฒ ๋๋ค. Hash index ์์ ์ถฉ๋์ด ๋ง์ด ๋ฐ์ ๋ ์๋ก ๊ฒ์ ํจ์จ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
- Hash index ๋ ๋๋ฑ(equal =) ๋น๊ต ๊ฒ์์ ์ฌ์ฉ ๋ฐ ์ต์ ํ ๋์ด ์์ผ๋ฉฐ ๋ฒ์๋ FullText Search ๋ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ชฉ์ ์ผ๋ก๋ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
- SELECT ์ง์ ์กฐ๊ฑด์๋ ๋ถ๋ฑํธ ์ฐ์ฐ(<>)๋ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ๋ถ๋ฑํธ ์ฐ์ฐ ์ฌ์ฉ ์ ๋ฌธ์ ๋ฐ์ํ ์ ์๋ค.
๊ฐ๋ณ ์ธ๋ฑ์ค ๋ ์ฝ๋์ S-Lock ํน์ X-Lock์ ์ค์ ํ๋ ๊ฒ์ด๋ค.
ํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด ์์ง ์๋๋ผ๋ ํ ์ด๋ธ ์์ฑ์์ ํจ๊ป ์์ฑ๋๋ default Clustered Index์ ๋ ์ฝ๋์ Lock์ ๊ฑธ์ด, ํญ์ ์ธ๋ฑ์ค ๋ ์ฝ๋์ Lock์ ์ค์ ํ๋ค.
SELECT * FROM a_table WHERE pk=10 LOCK IN SHARE MODE
# pk=10 ํ๋์ ๋ ์ฝ๋์ S-Lock์ด ๊ฑธ๋ฆผ
UPDATE a_table SET name="๊น์ง์" WHERE id="ji"
# id="ji" ํ๋์ ํค์ฝ๋์ X-Lock์ด ๊ฑธ๋ฆผ
- InnoDB Storage Engine ์ ๋ ์ฝ๋ ์ ๊ธ์ ์ํํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผ ํ ํด๋น ํ ์ด๋ธ ๋ ์ฝ๋๋ค์ ์ ๊ทธ๋ ๋ฐฉ์์ธ ๋ ์ฝ๋ ๋จ์ ์ ๊ธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์๋ค.
- ๋ฐ๋ผ์, UPDATE ๋ DELETE ๋ฅผ ์คํํ ๋ ํ
์ด๋ธ์ ์ ์ ํ ์ฌ์ฉํ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ๋ง์ ๋ ์ฝ๋๋ค์ด ์ ๊ธฐ๊ฒ ๋๋ค.
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ํ ์ด๋ธ ํ ์ค์บ์ ํตํด ๋ชจ๋ PK ์ธ๋ฑ์ค๊ฐ ์ ๊ธธ ์ ์๋ค.
Mutex Lock
์ด ๊ณผ๋ํ๊ฒ ์กํ๋ฉด ์ ์ ๋ฐ์ดํฐ ์ ์๋ ๋ถ๊ตฌํ๊ณ DB ์์ ์ฌ์ฉ ํจ์จ์ด ๋จ์ด์ง๊ฒ๋๋ค.- ์ด๋ฌํ ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด์ InnoDB ์์๋ Adaptive Hash Index ๋ผ๋ ๊ธฐ๋ฅ์ด ์๋ค.
์์
User ํ
์ด๋ธ์ ์ด ๋ ์ฝ๋ ๊ฐ์๋ 5000๊ฐ
์ฑ์จ ์ปฌ๋ผ์ด 'ํ'์ธ ๋ ์ฝ๋๋ 300๊ฐ
์ฑ์จ ์ปฌ๋ผ์ด 'ํ'์ด๊ณ , ์ด๋ฆ ์ปฌ๋ผ์ด '๊ธธ๋'์ธ ๋ ์ฝ๋๋ 1๊ฐ
์ฑ์จ ์ปฌ๋ผ์๋ idx_์ฑ์จ ์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ ค์์
UPDATE USER SET ์ทจ๋ฏธ="์ถ๊ตฌ" WHERE ์ฑ์จ = "ํ" AND ์ด๋ฆ = "๊ธธ๋"
idx_์ฑ์จ
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๋ ์ฝ๋ ์์ฒด๋ฅผ ์ ๊ทธ๋ ๊ฒ์ด ์๋๋ผ ์ฌ์ฉ๋ ์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฑ์ด 'ํ'์ธ ๋ ์ฝ๋๋ค์ด ์ ๊ธฐ๊ฒ ๋๋ค.
- ์ด๊ฒ์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
์ด๋ผ๊ณ ํ๋ค.
๋ง์ฝ์ idx_์ฑ์จ
์ธ๋ฑ์ค๊ฐ ์์๋ค๊ณ ํ๋ฉด, ์๋์ผ๋ก ์์ฑ๋ PK๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด๋ ํ
์ด๋ธ ํ ์ค์บ
์ ํ๊ฒ ๋์ด ๊ฒ์์ ์ฌ์ฉ๋ ๋ชจ๋ PK ์ธ๋ฑ์ค๊ฐ ์ ๊ธฐ๊ฒ ๋๋ค.
๋ง์ฝ ์ฑ์จ์ ์ด๋ฆ์ ๋ํ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋๋ผ๋ฉด ์ฑ๊ณผ ์ด๋ฆ์ด ์ผ์นํ๋ 1๊ฐ์ ๋ ์ฝ๋๋ง ์ ๊ธฐ๊ฒ ๋์์ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋์ง์ ๋ฐ๋ผ ๋ ์ฝ๋์ ์ ๊ธ ๋ฒ์๊ฐ ๋ฌ๋ผ์ง๊ฒ ๋๋ innoDB์์๋ ์ธ๋ฑ์ค๋ฅผ ์ ์คํ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
InnoDB ๋ B-Tree
๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฝ์ผ๋ก ์ธํ ์์ ์ฌ์ฉ ํจ์จ์ด ๋จ์ด์ง๋ ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด์ InnoDB Adative Hash Index
๊ธฐ๋ฅ์ ๋์
ํ๋ค.
-
InnoDB Adaptive Hash Index
๋ Hash Index ๋ก ๊ตฌํ๋์ด์์ผ๋ฉฐ, Adaptive ๋ผ๋ ๋จ์ด์์ ์์ํ ์ ์๋ฏ์ด, ๋ชจ๋ ๊ฐ๋ค์ด ํด์๋ก ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ, ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๊ฐ๋ง ๋ด๋ถ์ ์ผ๋ก ํ๋จํ์ฌ ์ํฉ์ ๋ง๊ฒ ํด์ ๊ฐ์ ์์ฑํ๋ค. -
Adative Hash Index
์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ฒดInnodb_Buffer_Pool_Size
์1/64
๋งํผ์ผ๋ก ์ด๊ธฐํ๋๋ค. -
์์ฃผ ์ฌ์ฉ๋๋ ์์์ ํด์๋ฅผ ํตํด์ ์ง์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์, ๋ด๋ถ์ ์ธ ๋ฝ(์ด๋ฅผํ ๋ฉด Mutex)์ผ๋ก ์ธํ ์ง์ฐ์ด ์ค์ด๋ ๋ค.
-
๊ฒ๋ค๊ฐ B-Tree์ ๋ฐ์ดํฐ ์ ๊ทผ ๋น์ฉ(O(LogN))์ ๋นํด, ํด์ ๋ฐ์ดํฐ ์ ๊ทผ ๋น์ฉ์ธ O(1)์ผ๋ก ๊ต์ฅํ ๋น ๋ฅธ ์๋๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
-
๋จ ์์ฃผ ์ฌ์ฉ๋๋ ์์ ๋ง์ ํด์๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์, SELECT๋ก ์ธํ์ฌ ๋ฐ๋์ ํด๋น ์์์ ํฅํ ์ง์ ์ ์ธ ํด์ ๊ฐ์ด ๋ง๋ค์ด์ง์ง ์๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ป๋ค ์ผฐ๋ค ํ ์ ์๋ค.
์ผ๊ธฐ
- set global innodb_adaptive_hash_index = 1;
๋๊ธฐ
- set global innodb_adaptive_hash_index = 0;
ํต๊ณ ์ ๋ณด ํ์ธํ๊ธฐ
- show global status like 'Innodb_adaptive_hash%';
Adaptive Hash Index๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ CPU๊ฐ 100% ์์ผ๋, Adaptive Hash Index๋ฅผ ์ฌ์ฉํ ์ดํ์๋ 60% ์ ๋๋ก ์ฌ์ฉ๋ฅ ์ด ๋ด๋ ค๊ฐ๋ค.
๋น๋ฒํ ๋ฐ์ดํฐ ์ ๊ทผ์ด ๋ง์ ํ๊ฒฝ์์๋ ๋๋จํ ํจ์จ์ด ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด์๋ค. ๊ทธ๋ฌ๋, ์ฃผ์๋ฅผ ํด์ผํ ์ ์ ์ค๋๋ ํ ์ด๋ธ์ธ ๊ฒฝ์ฐ์๋ ํด์๊ฐ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์์ ์ ์์ผ๋ฉฐ, ์ด์ ๋ํ ์ ์ด๋ ๋ถ๊ฐํ๋ค.
InnoDB Adaptive Hash Index๋ B-Tree์ ํ๊ณ๋ฅผ ๋ณด์ํ ์ ์๋ ์ข์ ๊ธฐ๋ฅ์ด๋ค.
ํนํ ๋จ์ผ ๋๋ค ํค ์ ๊ทผ์ด ๋น๋์๊ฒ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด, B-Tree ๋ฅผ ํตํ์ง ์๊ณ ๋ฐ์ดํฐ์ ์ ๊ทผ/์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ธฐ์ ์ข์ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ธ๋ค.
๊ทธ๋ฌ๋, ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ตํฐ๋ง์ด์ ๊ฐ ํ๋จํ์ฌ ํด์ ํค๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ ์ด๊ฐ ์ด๋ ค์ฐ๋ฉฐ, ์ ๊ฐ์ ๋์ ์ฌ์ฉ๋์ง ์๋ ํ ์ด๋ธ์ผ์ง๋ผ๋ ๊ธฐ์กด ํด์ ์๋ฃ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๊ฐ ๋จ์ ์๊ฒ ๋๋ฉด, ํ ์ด๋ธ Drop ์ ์ํฅ์ ์ค ์ ์๋ค. ํด์ ์ธ๋ฑ์ค์ ์์กดํ์ฌ ํธ๋ํฝ์ด ์ฃผ๋ก ์ฒ๋ฆฌ๋๋ ์๋น์ค์ธ ๊ฒฝ์ฐ ์ด๋ฐ ์ ์ ์ผ๋ํด ๋๊ณ ์ฌ์ฉ์ ํ๋ค.
๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฆฌํ ๋ ธ๋์์ ์ธ๋ฑ์ค ๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์ ๋ ฌ๋ ๊น?
-- ์ธ๋ฑ์ค ์์ฑ
create index member_info_idx on member(groupno, lastname, firstname, age);
- ๋๋ฒ์งธ ์ปฌ๋ผ์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ ์ ๋ ฌ์ ์์กดํ๊ณ , ์ธ๋ฒ์งธ ์ปฌ๋ผ์ ๋๋ฒ์งธ ์ปฌ๋ผ์ ์์กดํ๋ค.
- JiHye์ Age๊ฐ ๋ ๋น ๋ฅด๋๋ผ๋(์ซ์ ๊ฐ์ด ๋ฎ๋ค๋ ์๋ฏธ) ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ ์ ๋ ฌ ์์๊ฐ ์ด์ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋งจ ๋ง์ง๋ง์ ์์นํ๊ฒ ๋๋ค.
๋ฐ๋ผ์, ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค
๋ฅผ ์์ฑํ ๋ ์ปฌ๋ผ์ ์์น(์์)๊ฐ ์๋นํ ์ค์ํ๊ธฐ ๋๋ฌธ์ ์ ์คํ๊ฒ ๊ฒฐ์ ํด์ผ ํ๋ค.
์ธ๋ฑ์ค ์ ๋ ฌ ๋ฐ ์ค์บ ๋ฐฉํฅ ์ธ๋ฑ์ค ํค๊ฐ์ ํญ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ฑ์ค๋ฅผ ์๋ ๋ถํฐ ์ฝ์์ง ์์์ ๋ถํฐ ์ฝ์์ง ์ ํ๋ ๊ฒ์, ์ฟผ๋ฆฌ์ ๋ฐ๋ผ์ ์ตํฐ๋ง์ด์ ๊ฐ ์คํ ๊ณํ์ ๋ง๋ค์ด ๊ทธ ๊ณํ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
๋ฐ์ดํฐ์ ์ค๋ณต ํ์ฉ ์ฌ๋ถ๋ก ๊ตฌ๋ถํ๋ฉด ์ ๋ํฌ ์ธ๋ฑ์ค์ ์ ๋ํฌ ํ์ง ์์ ์ธ๋ฑ์ค๋ก ๋๋ ์ ์๋ค.
์ธ๋ฑ์ค๊ฐ ์ ๋ํฌํ์ง ์๋์ง๋ DBMS ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ผ ํ๋ ์ตํฐ๋ง์ด์ ํํ ์ค์ํ๋ค.
๊ฐ์ด ์ ๋ํฌ ํ๋ฉด ์ ๋ํฌ ์ธ๋ฑ์ค์ ๋ํด ๋๋ฑ ์กฐ๊ฑด(Equal, =)์ผ๋ก ๊ฒ์ํ๋ค๋ ๊ฒ์ ์ตํฐ๋ง์ด์ ์๊ฒ ์๋ ค์ค ์ ์๋ค.
๋๋ฑ ์กฐ๊ฑด(Equal, =)์ผ๋ก ๊ฒ์ํ๋ค๋ ๊ฒ : ํญ์ 1๊ฑด์ ๋ ์ฝ๋๋ง ์ฐพ์ผ๋ฉด ๋ ์ด์ ์ฐพ์ง ์์๋ ๋๋ค๋ ์๋ฏธ
- ์ ๋ํฌํ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ๊ฒฐ๊ตญ ์ ๋ํฌ ์ธ๋ฑ์ค๊ฐ ๋๋ค.
- ์ ๋ํฌ ์ธ๋ฑ์ค์ ์ ๋ํฌํ์ง ์์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ๊ตฌ์กฐ ์ ์ฐจ์ด๊ฐ ์๋ค.
์ธ๋ฑ์ค ์ฐ๊ธฐ
- ์ ๋ํฌ ์ธ๋ฑ์ค์ ํค ๊ฐ์ ์ธ ๋๋ ์ค๋ณต๋ ๊ฐ์ด ์๋์ง ์๋์ง ์ฒดํฌํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
- MySQL์์๋ ์ค๋ณต๋ ๊ฐ์ ์ฒดํฌํ ๋๋ ์ฝ๊ธฐ ์ ๊ธ์ ์ฌ์ฉํ๊ณ , ๊ฐ ์ฐ๊ธฐ๋ฅผ ํ ๋๋ ์ฐ๊ธฐ ์ ๊ธ์ ์ฌ์ฉํ์ฌ ๋ฐ๋๋ฝ์ด ๋น๋ฒํ ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ณด๋ค ์ ๋ํฌ ์ธ๋ฑ์ค๊ฐ ์ฐ๊ธฐ ์์ ์์๋ ์ฑ๋ฅ ์ ๋๋ฆฌ๋ค.
์ ๋ํฌ ์ธ๋ฑ์ค ์ฌ์ฉ ์ ์ฃผ์ ์ฌํญ ์ ์ผ์ฑ์ด ๊ผญ ๋ณด์ฅ๋์ด์ผ ํ๋ ์์ ์ ๋ํด์๋ ์ ๋ํฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋, ๊ผญ ํ์ํ์ง ์๋ค๋ฉด ์ ๋ํฌ ์ธ๋ฑ์ค๋ณด๋ค๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
Hint ๋, SQL ๋ฌธ์ฅ์ ํน๋ณํ ํค์๋๋ฅผ ์ง์ ํ์ฌ ์ตํฐ๋ง์ด์ ์๊ฒ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ด ํจ๊ณผ์ ์ธ์ง ์๋ ค์ฃผ๋ ํค์๋๋ฅผ ์๋ฏธํ๋ค.
MySQL ์์๋ ์ค์ ๋ก ์ฟผ๋ฆฌ์ ์ฑ๋ฅ ๊ฐ์ ์ ์ํด ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒ์ด 4 ~ 5๊ฐ ์ ๋๋ผ๊ณ ํ๋ค. Hint ๋ ์ตํฐ๋ง์ด์ ์๊ฒ ์ํฅ์ ๋ฏธ์น๋ค. ๋ฐ๋ผ์ Hint ๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ SQL ์ ์์์ ์ต์ ํ ํด์ฃผ๋ ๊ฒ์ ๋ณธ์ธ์ด ๋ง์น๋ ์ ์ด ๋ ์๋ ์๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
- SQL ๋ฌธ์ฅ์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์
- SELECT * FROM member USE INDEX (PRIMARY) WHERE id = 1001;
- ์ฃผ์ ํ๊ธฐ ๋ฐฉ์
- SELECT * FROM member /*! USE INDEX (PRIMARY) */ WHERE id = 1001;
Oracle ๊ณผ ๊ฐ์ ๋ค๋ฅธ DBMS ๋ค์ Hint ๋ฅผ ์ฃผ์์ผ๋ก ํด์ํ๋๋ฐ, MySQL ์ SQL ์ ์ผ๋ถ๋ก ํด์ํ๊ธฐ ๋๋ฌธ์ ์ ๋ชป ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
10๋ถ ํ ์ฝํก-์ฌ๋ผํ์ Clustered vs Non-clustered Index
10๋ถ ๋ฐ์ฝํก-์๋์ Index
์ธ๋ฑ์ค๋ ๋ฌด์์ธ๊ฐ์?
์ธ๋ฑ์ค์ ์ฅ์ ๊ณผ ๋จ์ ์๋ ๋ฌด์์ด ์๋์?
์ธ๋ฑ์ค์ ์๋ฃ๊ตฌ์กฐ๋ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ๋์?
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ์ ๋์ ๊ฒฝ์ฐ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค/๋ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ๋ฌด์์ด๊ณ ์ฅ์ ์ ๋ฌด์์ธ๊ฐ?
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ๊ณผ ์ธ๋ฑ์ค ํ ์ค์บ์ ์ฐจ์ด๋ ๋ฌด์์ด์๋์?