์ธ๋ฑ์ค๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ (ํน์ ์ปฌ๋ผ์ ๋ณต์ฌํด์ ์ ๋ ฌํด ๋๋ค!)
ex) ์ฐ๋ฆฌ๊ฐ ์ฑ ์์ ์ํ๋ ๋ด์ฉ์ ์ฐพ๋๋ค๊ณ ํ๋ฉด, ์ฑ ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐพ์๋ณด๋ ๊ฒ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฑ ์ ์ ์๋ค์ ๋ณดํต ์ฑ ์ ๋งจ ๋ค์ ์์ธ์ ์ถ๊ฐํ๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ index๋ ์ฑ ์ ์์ธ๊ณผ ๊ฐ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ํฌํจํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ์ฌ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋๋ก ๋๋๋ค.
์ธ๋ฑ์ค์ ๊ด๋ฆฌ
DBMS๋ index๋ฅผ ํญ์ ์ต์ ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํด์ผ ์ํ๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ํ์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋ ์ปฌ๋ผ์ INSERT, UPDATE, DELETE๊ฐ ์ํ๋๋ค๋ฉด, ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ถ๊ฐ์ ์ผ๋ก ํด์ฃผ์ด์ผ ํ๋ฉฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- INSERT: ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ
- DELETE: ์ญ์ ํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ์์ ์ ์งํํจ
- UPDATE: ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฒ๋ฆฌํ๊ณ , ๊ฐฑ์ ๋ ๋ฐ์ดํฐ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ
์ธ๋ฑ์ค์ ์ฅ๋จ์
์ฅ์
๐ ํ ์ด๋ธ์ ์กฐํํ๋ ์๋์ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
Where์ ์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ค์ ์ฐพ์๋ผ ๋ ๋ ์ฝ๋์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค ์ฝ์ด์ ๊ฒ์ ์กฐ๊ฑด๊ณผ ๋ง๋์ง ๋น๊ตํด์ผ ํ๋ค. => ํ ํ ์ด๋ธ ์ค์บ (Full Table Scan)
์ธ๋ฑ์ค ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ค์ด ์ ๋ ฌ๋์ด ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ์กฐ๊ฑด (Where)์ ๋ง๋ ๋ฐ์ดํฐ๋ค์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ผ ์ ์๋ค.
๐ ์ ๋ฐ์ ์ธ ์์คํ ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
๋จ์
๐ ์ธ๋ฑ์ค ๊ด๋ฆฌ๋ฅผ ์ํ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ๋ค.
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์คํฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค.
์ธ๋ฑ์ค๊ฐ ํฌ๊ฑฐ๋ ๋ง์ ์์ ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฒด ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์๋ค.
ํฐ ์ธ๋ฑ์ค๋ ๋์คํฌ I/O ๋น์ฉ์ ์ฆ๊ฐ์ํฌ ์๋ ์๋ค.
๐ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ, ์์ , ์ญ์ ๋ ๋ ์ธ๋ฑ์ค๋ ํจ๊ป ์ ๋ฐ์ดํธ๋์ด์ผ ํ๋ค.
ํนํ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ์ ์ํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๐ ์ธ๋ฑ์ค์ ์ ์ง ๋น์ฉ์ด ๋ฐ์ํ๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค ์ ์ง ๋น์ฉ์ด ์๋นํ ์ปค์ง ์ ์๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
ํน์ ์ปฌ๋ผ์ ๊ฒ์์กฐ๊ฑด์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
ex) ์ฃผ๋ฌธ ๋ฒํธ๋ก ์ฃผ๋ฌธ์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ, ์ฃผ๋ฌธ ๋ฒํธ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ํด๋น ์ฃผ๋ฌธ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
์ ๋ ฌ ์ฐ์ฐ์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ (Order By)
์ ๋ ฌ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ์ ๋ ฌ ์๋๊ฐ ํฅ์๋ ์ ์๋ค.
ex) ์ฌ์ฉ์์ ์ด๋ฆ์ผ๋ก ์ ๋ ฌํ๋ ๊ฒฝ์ฐ, ์ด๋ฆ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ์ ๋ ฌ ์์ ์ด ๋น ๋ฅด๊ฒ ์ํ๋ ์ ์๋ค.
์ธ๋ฑ์ค์ ์๋ฃ๊ตฌ์กฐ
B+ Tree
DB์ ์ธ๋ฑ์ค๋ฅผ ์ํด ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-Tree๋ฅผ ๊ฐ์ ์ํจ ์๋ฃ๊ตฌ์กฐ
B+Tree๋ ๋ชจ๋ ๋ ธ๋์ ๋ฐ์ดํฐ(Value)๋ฅผ ์ ์ฅํ๋ BTree์ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
- ๋ฆฌํ๋ ธ๋(๋ฐ์ดํฐ๋ ธ๋)๋ง ์ธ๋ฑ์ค์ ํจ๊ป ๋ฐ์ดํฐ(Value)๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋๋จธ์ง ๋ ธ๋(์ธ๋ฑ์ค๋ ธ๋)๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค(Key)๋ง์ ๊ฐ๋๋ค.
- ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๋ฐ์ดํฐ ๋ ธ๋ ํฌ๊ธฐ๋ ์ธ๋ฑ์ค ๋ ธ๋์ ํฌ๊ธฐ์ ๊ฐ์ง ์์๋ ๋๋ค.
- Root Node์์ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ํ ๊ทธ์ ๋ง๋ ๋ ธ๋๋ก ์ด๋ํ์ฌ ์ต์ข ์ ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ Leaf Node์ ๋์ฐฉํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ถ๋ฑํธ๋ฅผ ์ด์ฉํ ์์ฐจ ๊ฒ์ ์ฐ์ฐ์ด ์์ฃผ ๋ฐ์๋ ์ ์๋ค.
์ด๋ฌํ ์ด์ ๋ก BTree์ ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐํ์ฌ ์์ฐจ๊ฒ์์ ์ฉ์ดํ๊ฒ ํ๋ ๋ฑ BTree๋ฅผ ์ธ๋ฑ์ค์ ๋ง๊ฒ ์ต์ ํํ์๋ค. (๋ฌผ๋ก Best Case์ ๋ํด ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ง ์์๋ ํ์ํ ์ ์๋ BTree์ ๋นํด ๋ฌด์กฐ๊ฑด ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ผ ํ๋ค๋ ๋จ์ ๋ ์๋ค.)
์ด๋ฌํ ์ด์ ๋ก ๋น๋ก B+Tree๋ O(log2n) ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ง ํด์ํ ์ด๋ธ๋ณด๋ค ์ธ๋ฑ์ฑ์ ๋์ฑ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋์๋ค.
Reference
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ฆผ์ผ๋ก ์์๋ณด๋ B+Tree
'๐กCS > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Database] ํธ๋์ ์ (Transaction) (0) | 2023.06.16 |
---|---|
[Database] ์ ๊ทํ(Normalization) (0) | 2023.06.16 |
์ปค๋ฅ์ ํ(Connection Pool)์ด๋? (0) | 2023.04.05 |
๋๊ธ