๐ป [Theory] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค(index)
๐ป [Theory] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค(index)
์ด๋ฒ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค(index)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค(index)๋ ๋ฌด์์ธ๊ฐ?
์ธ๋ฑ์ค(์์ด: index)๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถ์ผ์ ์์ด์ ํ ์ด๋ธ์ ๋ํ ๋์์ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ผ์ปซ๋๋ค.
์ธ๋ฑ์ค๋ ์ถ๊ฐ์ ์ธ ์ฐ๊ธฐ ์์ ๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ฑ ์์ ์ํ๋ ๋ด์ฉ์ ์ฐพ๋๋ค๊ณ ํ๋ฉด, ์ฑ ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐพ์ ๋ณด๋๊ฒ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฑ ์ ์ ์๋ค์ ์ฑ ์ ๋งจ ์ ๋๋ ๋งจ ๋ค์ ์์ธ์ ์ถ๊ฐํ๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ index ๋ ์ฑ ์ ์์ธ๊ณผ ๊ฐ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ํฌํจํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ์ฌ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋๋ก ๋๊ณ ์๋ค.
์ธ๋ฑ์ค(index)์ ํ์์ฑ?
๊ทธ๋ผ ์ธ๋ฑ์ค(index)์ ํ์์ฑ์ ๋ฌด์์ผ๊น?
์ธ๋ฑ์ค์ ์๋ฏธ์ ๋ฐ์ ํ๋ค. ๋ฐ๋ก ๊ฒ์ ์๋๋ฅผ ํฅ์ ์ํค๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ฐ์ฐ์ ๊ฒ์ ์ฐ์ฐ์ด๋ค.
์ฆ, ๊ทธ๋งํผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ผ์ด ๊ฐ์ฅ ๋ง๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋น ๋ฅธ ์กฐํ๋ฅผ ๊ฐ๋ฅํ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ ์ ๋ฐ์ดํฐ์์๋ ์๊ด์ด ์๊ฒ ์ง๋ง ๋์ฉ๋ ๋ฐ์ดํฐ์์ ๋ชจ๋ ํ ์ด๋ธ์ ํ์ํ๋ Full Table Scan์ ๋นํจ์จ์ ์ด๋ฏ๋ก
๋ฑ์ฅํ๊ฒ ๋์๋ค.
์ธ๋ฑ์ค(index)์ ๊ด๋ฆฌ
DBMS๋ index๋ฅผ ํญ์ ์ต์ ์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํด์ผ ์ํ๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ํ์ํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋ ์ปฌ๋ผ์ INSERT, UPDATE, DELETE๊ฐ ์ํ๋๋ค๋ฉด ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ถ๊ฐ์ ์ผ๋ก ํด์ฃผ์ด์ผ ํ๋ฉฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- INSERT : ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ
- DELETE : ์ญ์ ํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ์์ ์ ์งํํจ
- UPDATE : ๋ฑํ UPDATE ๊ฐ๋ ์ด ์์!!! ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ โ์ฌ์ฉํ์ง ์์โ ์ฒ๋ฆฌํ๊ณ , ๊ฐฑ์ ๋ ๋ฐ์ดํฐ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ. (DELETE+INSERT)
์ธ๋ฑ์ค(index)์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
-
ํ ์ด๋ธ์ ์กฐํํ๋ ์๋์ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
-
์ ๋ฐ์ ์ธ ์์คํ ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
๋จ์
-
์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด DB์ ์ฝ 10%์ ํด๋นํ๋ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ๋ค.
-
์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
-
์ธ๋ฑ์ค๋ฅผ ์๋ชป ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋๋ ์ญํจ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค.
-
DML์ ์ทจ์ฝ
๋ง์ฝ CREATE, DELETE, UPDATE๊ฐ ๋น๋ฒํ ์์ฑ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ๋น๋ํด์ ธ์ ์ฑ๋ฅ์ด ์คํ๋ ค ์ ํ๋๋ ์ญํจ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๊ทธ๋ฌํ ์ด์ ์ค ํ๋๋ DELETE์ UPDATE ์ฐ์ฐ ๋๋ฌธ์ด๋ค. ์์์ ์ค๋ช ํ๋๋ก, UPDATE์ DELETE๋ ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ์ง ์๊ณ โ์ฌ์ฉํ์ง ์์โ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค๊ณ ํ์๋ค. ๋ง์ฝ ์ด๋ค ํ ์ด๋ธ์ UPDATE์ DELETE๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์๋๋ค๋ฉด ์ค์ ๋ฐ์ดํฐ๋ 10๋ง๊ฑด์ด์ง๋ง ์ธ๋ฑ์ค๋ 100๋ง ๊ฑด์ด ๋์ด๊ฐ๊ฒ ๋์ด, SQL๋ฌธ ์ฒ๋ฆฌ ์ ๋น๋ํด์ง ์ธ๋ฑ์ค์ ์ํด ์คํ๋ ค ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ ๋ ๊ฒ์ด๋ค.
์ธ๋ฑ์ค(index)๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
- ๊ท๋ชจ๊ฐ ์์ง ์์ ํ ์ด๋ธ
- INSERT, UPDATE, DELETE๊ฐ ์์ฃผ ๋ฐ์ํ์ง ์๋ ์ปฌ๋ผ
- JOIN์ด๋ WHERE ์ ์ด ๋ง์ด ์ฌ์ฉ๋๋ ์ปฌ๋ผ - ํน์ ์กฐ๊ฑด๋ถํฐ ์ค์บํ๋ฏ๋ก
- ์ธ๋ฑ์ค๋ ์ ๋ ฌ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ORDER BY์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ์ฉ์ด
- ๋ฐ์ดํฐ์ ์ค๋ณต๋๊ฐ ๋ฎ์ ์ปฌ๋ผ (== ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ปฌ๋ผ)
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋งํผ์ด๋ ์์ฑ๋ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ๋ ์ค์ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ์ธ๋ฑ์ค๋ ๋ฐ๋ก ์ ๊ฑฐ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
์ธ๋ฑ์ค(index)์ ๋ํ์ ์ธ ์๋ฃ๊ตฌ์กฐ
์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ํ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ ํด์ ํ ์ด๋ธ๊ณผ B+Tree ๊ฐ ์๋ค.
ํด์ ํ ์ด๋ธ (Hash Table)
ํด์ ํ ์ด๋ธ์ (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ด ํ์ํ ๋ ์ ์ฉํ๋ค. ํด์ ํ ์ด๋ธ์ ํด์ ํจ์๋ฅผ ์ด์ฉํด ๊ณ ์ ํ index(key) ๋ฅผ ์์ฑํ์ฌ ๊ทธ index์ ์ ์ฅ๋ ๊ฐ์ ๊บผ๋ด์ค๋ ๊ตฌ์กฐ์ด๋ค. ๊ณ ์ ํ index(key)๋ฅผ ํตํด ๊ฐ์ ๊บผ๋ด์ค๋ฏ๋ก O(1)์ ๋งค์ฐ ๋น ๋ฅธ ์๊ฐ๋ณต์ก๋๋ก ๊ฒ์์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง DB ์ธ๋ฑ์ค์์ ํด์ ํ ์ด๋ธ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์ ํ์ ์ธ๋ฐ, ๊ทธ๋ฌํ ์ด์ ๋ ํด์๊ฐ ๋ฑํธ(=) ์ฐ์ฐ์๋ง ํนํ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ํด์ ํจ์๋ ๊ฐ์ด 1์ด๋ผ๋ ๋ฌ๋ผ์ง๋ฉด ์์ ํ ๋ค๋ฅธ ํด์ ๊ฐ์ ์์ฑํ๋๋ฐ, ์ด๋ฌํ ํน์ฑ์ ์ํด
๋ถ๋ฑํธ ์ฐ์ฐ(>, <)์ด ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์์ ์ํด์๋ ํด์ ํ ์ด๋ธ์ด ์ ํฉํ์ง ์๋ค.
์ฆ, ์๋ฅผ ๋ค๋ฉด โ๋๋โ์ผ๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ฌธ์ ์ธ๋ฑ์ค์ ํํ์ ์ ํ ๋ฐ์ง ๋ชปํ๊ฒ ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค์์๋ B+Tree๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
B+Tree
B+Tree๋ DB์ ์ธ๋ฑ์ค๋ฅผ ์ํด ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-Tree๋ฅผ ๊ฐ์ ์ํจ ์๋ฃ๊ตฌ์กฐ์ด๋ค. B+Tree๋ ๋ชจ๋ ๋ ธ๋์ ๋ฐ์ดํฐ(Value)๋ฅผ ์ ์ฅํ๋ BTree์ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
๋ฆฌํ๋ ธ๋(๋ฐ์ดํฐ๋ ธ๋)๋ง ์ธ๋ฑ์ค์ ํจ๊ป ๋ฐ์ดํฐ(Value)๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋๋จธ์ง ๋ ธ๋(์ธ๋ฑ์ค๋ ธ๋)๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค(Key)๋ง์ ๊ฐ๋๋ค. ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐ๋์ด ์๋ค. ๋ฐ์ดํฐ ๋ ธ๋ ํฌ๊ธฐ๋ ์ธ๋ฑ์ค ๋ ธ๋์ ํฌ๊ธฐ์ ๊ฐ์ง ์์๋ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ถ๋ฑํธ๋ฅผ ์ด์ฉํ ์์ฐจ ๊ฒ์ ์ฐ์ฐ์ด ์์ฃผ ๋ฐ์๋ ์ ์๋ค. ์ด๋ฌํ ์ด์ ๋ก BTree์ ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐํ์ฌ ์์ฐจ๊ฒ์์ ์ฉ์ดํ๊ฒ ํ๋ ๋ฑ BTree๋ฅผ ์ธ๋ฑ์ค์ ๋ง๊ฒ ์ต์ ํํ์๋ค. (๋ฌผ๋ก Best Case์ ๋ํด ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ง ์์๋ ํ์ํ ์ ์๋ BTree์ ๋นํด ๋ฌด์กฐ๊ฑด ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ผํ๋ค๋ ๋จ์ ๋ ์๋ค.)
์ด๋ฌํ ์ด์ ๋ก ๋น๋ก B+Tree๋ O(log2n) ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ง ํด์ํ ์ด๋ธ๋ณด๋ค ์ธ๋ฑ์ฑ์ ๋์ฑ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋์๋ค.
๋
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค(index)์ ๋ํด ์์๋ณด์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๐
Reference