Index
Index
Database์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋, ์ ์ฌ๋ ๋ฐ์ดํฐ์ ์์ด ๋งค์ฐ ๋ง๊ฑฐ๋, ๋ง์์ง ๊ฒ์ด ์๋ช ํ ๊ฒฝ์ฐ.
๋ณดํต Index๋ฅผ ํน์ column์ ์ ์ฉํจ์ผ๋ก์จ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํด๊ฒฐํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ค๋์ ๋ค์ ๋ ๋จ๊ณจ ์ง๋ฌธ์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
Index๋ฅผ ์ ์ฉํ๋ฉด ์ด๋ค ์๋ฆฌ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋๋ ๊ฒ์ผ๊น?
Index๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๋ฌด์กฐ๊ฑด ์ข์๊ฐ?
About Index
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ํ ๊ฒ์ ์ฑ๋ฅ์ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์๋ฃ ๊ตฌ์กฐ๋ค.
ํน์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด, ํด๋น ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ค์ ์ ๋ ฌํ์ฌ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ฃผ์์ ํจ๊ป ์ ์ฅ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํน์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ ๋ ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.

์ธ๋ฑ์ค์ ๊ฐ์ฅ ํฐ ํน์ง์ ๋ฐ์ดํฐ๋ค์ด ์ ๋ ฌ์ด ๋์ด์๋ค๋ ์ ์ด๋ค.
์ด ํน์ง์ผ๋ก ์ธํด ์กฐ๊ฑด ๊ฒ์์ด๋ผ๋ ์์ญ์์ ๊ต์ฅํ ์ฅ์ ์ด ๋๋ค.
WHERE ์ ์ ํจ์จ์ฑ
ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์์ ๋ฐ์ดํฐ๊ฐ ์์ด๊ฒ ๋๋ฉด ํ ์ด๋ธ์ ๋ ์ฝ๋(row : ํ)๋ ๋ด๋ถ์ ์ผ๋ก ์์๊ฐ ์์ด ๋ค์ฃฝ๋ฐ์ฃฝ์ผ๋ก ์ ์ฅ์ด ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ, WHERE ์ ์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ค์ ๊ฒ์ํ ๋ ํ์ค์บ์ ํด์ ๋น๊ตํ๋ค.
ํ์ง๋ง ์ธ๋ฑ์ค ํ ์ด๋ธ ์ค์บ(Index Table Scan) ์ ์ธ๋ฑ์ค ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ค์ด ์ ๋ ฌ๋์ด ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ์กฐ๊ฑด(WHERE)์ ๋ง๋ ๋ฐ์ดํฐ๋ค์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ผ ์ ์๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ์ด๋ค.
ORDER BY ์ ์ ํจ์จ์ฑ
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ORDER BY์ ์ํ ์ ๋ ฌ(Sort) ๊ณผ์ ์ ํผํ ์๊ฐ ์๋ค.
ORDER BY๋ ๊ต์ฅํ ๋ถํ๊ฐ ๋ง์ด ๊ฑธ๋ฆฌ๋ ์์ ์ด๋ค.
์ ๋ ฌ๊ณผ ๋์์ 1์ฐจ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๊ณ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฐ ์์ ์ด ํ์ํ๋ค๋ฉด ๋์คํฌ I/O๋ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋์คํฌ I/O๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ๋ณ๊ฒฝํ ๋ HDD์ ์ ์ฅ๋๋ ๊ฒ์ ๋งํ๋ค.
ํ์ง๋ง ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ ๋ฐ์ ์ธ ์์์ ์๋ชจ๋ฅผ ํ์ง ์์๋ ๋๋ค.
MIN, MAX์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ
์ด๊ฒ ๋ํ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๊ธฐ์ ์ป์ ์ ์๋ ์ฅ์ ์ด๋ค.
MIN๊ฐ๊ณผ MAX๊ฐ์ ๋ ์ฝ๋์ ์์ ๊ฐ๊ณผ ๋ ๊ฐ๋ง ๊ฐ์ ธ์ค๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํ์ค์บ์ผ๋ก ์์ ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ด๋ค.
Cons of Index
์ธ๋ฑ์ค์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ๊ณ์ ์ ์ง์์ผ์ค์ผ ํ๋ค๋ ์ ์ด๋ค.
DML
INSERT, UPDATE, DELETE๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ๊ฐ์ด ๋ฐ๋๋ค๋ฉด ์ธ๋ฑ์ค ํ ์ด๋ธ ๋ด์ ์๋ ๊ฐ๋ค์ ๋ค์ ์ ๋ ฌ์ ํด์ผ ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ DML์ด ๋น๋ฒํ ํ ์ด๋ธ๋ณด๋ค ๊ฒ์์ ์์ฃผ๋ก ํ๋ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
์ฃผ๋ฌธ๋ฐ์ดํฐ, ๊ฑฐ๋๋ฐ์ดํฐ์ ๊ฐ์ด DML์ด ๋น๋ฒํ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
์๋ ํฅ์์ ์ํด ์ธ๋ฑ์ค๋ฅผ ๋ง์ด ๋ง๋๋ ๊ฒ์ ์ข์ง ์๋ค.
์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ 10%์ ํด๋นํ๋ ์ ์ฅ๊ณต๊ฐ์ด ์ถ๊ฐ๋ก ํ์ํ๋ค.
๋ฌดํฑ๋๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด์๋ ๊ฒฐ์ฝ ์ ๋๋ค๋ ๊ฒ์ด๋ค.
์ฆ, ์๋ ํฅ์์ ๋นํด ๋จ์ ๋ค์ COST๋ฅผ ๋น๊ตํด์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ง ๋ง์ง๋ฅผ ์ ํด์ผ ํ๋ค.
Data structure of Index
์ฐ์ B+ Tree์ ๋ํด์ ์์๋ณด์.
B+Tree๋ ์ด๋ฆ์ฒ๋ผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค. ๋ฐ์ด๋๋ฆฌ ํธ๋ฆฌ๋ ๊ฐ๋ ์ ์ผ๋ก๋ ๋น์ทํ๋ค.
B+Tree๋ DB์ ์ธ๋ฑ์ค๋ฅผ ์ํด ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-Tree๋ฅผ ๊ฐ์ ์ํจ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
B+Tree๋ ๋ชจ๋ ๋ ธ๋์ ๋ฐ์ดํฐ(Value)๋ฅผ ์ ์ฅํ๋ BTree์ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
๋ฐ๋ผ์ Key ๊ฐ์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ํํ์ธ๋ฐ, ๋ค๋ฅธ ์ ์ Children ๋
ธ๋๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ ์ ์ด๋ค.
๋ํ ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๋์คํฌ์ ์๋ค.
์๋ ๊ทธ๋ฆผ์ ์ฐธ์กฐํ์. ๊ฐ ๋ ธ๋๋ค์ด ๋์คํฌ์ ์ ์ฅ๋์ด ์๊ณ ํฌ์ธํฐ๋ก ์ฐพ์๊ฐ๋ ๋ฐฉ์์ด๋ค.

๋ํ ๊ฐ leaf๋ ธ๋๋ ํ์ ๋ ธ๋(sibling)์ผ๋ก ๊ฐ๋ ํฌ์ธํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ range query์ ํจ์จ์ ์ด๋ค.
๊ทธ ๋ค์์ผ๋ก๋ Hash Table ์ด ์๋ค.

ํด์ ํ ์ด๋ธ ๊ธฐ๋ฐ์ DB ์ธ๋ฑ์ค๋ (๋ฐ์ดํฐ=์ปฌ๋ผ์ ๊ฐ, ๋ฐ์ดํฐ์ ์์น)๋ฅผ (Key, Value)๋ก ์ฌ์ฉํ์ฌ ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ์์ฑ๋ ํด์๋ฅผ ํตํด ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๋ค.
ํด์ ํ ์ด๋ธ์ ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋ฉฐ ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์์ ์ง์ํ๋ค.
ํ์ง๋ง DB ์ธ๋ฑ์ค์์ ํด์ ํ ์ด๋ธ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์ ํ์ ์ธ๋ฐ, ๊ทธ๋ฌํ ์ด์ ๋ ํด์๊ฐ ๋ฑํธ(=) ์ฐ์ฐ์๋ง ํนํ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
ํด์ ํจ์๋ ๊ฐ์ด 1์ด๋ผ๋ ๋ฌ๋ผ์ง๋ฉด ์์ ํ ๋ค๋ฅธ ํด์ ๊ฐ์ ์์ฑํ๋๋ฐ, ์ด๋ฌํ ํน์ฑ์ ์ํด ๋ถ๋ฑํธ ์ฐ์ฐ(>, <)์ด ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์์ ์ํด์๋ ํด์ ํ ์ด๋ธ์ด ์ ํฉํ์ง ์๋ค.
Last updated