DB Index๋ฅผ ๊ณต๋ถํ๋ ์ค B+Tree๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ๋ํด์ ์๊ฒ ๋์๋ค.
์ด๋ B-Tree์์ ํ์ฅ๋ ๊ฐ๋ ์ด๊ธฐ์, ์ด๋ฒ ๊ธ์ ํตํด์ B-Tree, B+Tree์ ๋ํด ์์๋ณด๊ณ ๊ทธ ์ฐจ์ด์ ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
B-Tree๋ ๊ท ํ ์กํ ๋ค์ง ๊ฒ์ ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํ๋ฉด์ ๋น ๋ฅธ ๊ฒ์ & ์ฝ์ & ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋ ๊ตฌ์กฐ์ด๋ค.
์ ์ด๋ฏธ์ง์ ์๋ ์ฌ๊ฐํ์ ๊ฐ๊ฐ ๋
ธ๋
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋
ธ๋๋ ์๋ 3๊ฐ์ง ์ข
๋ฅ๊ฐ ์กด์ฌํ๋ค.
1. ๊ฐ์ฅ ์๋จ์ ์์นํ Root ๋
ธ๋
2. ์ค๊ฐ์ ์์นํ Branch ๋
ธ๋๋ค
3. ๊ฐ์ฅ ํ๋จ์ ์์นํ Leaf ๋
ธ๋๋ค
Root ๋ ธ๋์ ๊ฒฝ์ฐ์๋ ํธ๋ฆฌ์ ์ง์ ์ ์ด์ ์ต์๋จ ๋ ธ๋์ด๊ธฐ์ ๋ฌด์กฐ๊ฑด 1๊ฐ๋ง ์กด์ฌํ๋ค.
Binary Search Tree
B-Tree
๋์ ํต์ฌ์ ์ธ ๋์ ์๋ฆฌ๋ ๋์ผํ๋ค. ํ์ง๋ง ์๋์ ๊ฐ์ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
ํญ๋ชฉ | BST (Binary Search Tree) | B-Tree |
---|---|---|
๋ ธ๋๋น ํค ์ | 1๊ฐ | ์ฌ๋ฌ ๊ฐ |
๋น๊ต ๋ฐฉ์ | ํ์ฌ ๋ ธ๋์ ํค 1๊ฐ์ ๋น๊ต | ํ์ฌ ๋ ธ๋์ ๋ฐฐ์ด ํํ ํค๋ค ์ค ํ๋์ ๋น๊ตํ์ฌ ๋ถ๊ธฐ |
์์ ์ | ์ต๋ 2๊ฐ | ์ต๋ M๊ฐ (ํธ๋ฆฌ์ ์ฐจ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋จ) |
๋ถ๊ธฐ ๊ธฐ์ค | ์ผ์ชฝ < key < ์ค๋ฅธ์ชฝ | ํค ์ฌ์ด ๊ตฌ๊ฐ์ ๋ฐ๋ผ ์์ ํฌ์ธํฐ ์ ํ |
B-Tree ๋์ ์๋ฆฌ์ ํต์ฌ์ ํ๋์ ๋ ธ๋์ ์ฌ๋ฌ ํค๋ฅผ ์ ์ฅํ๊ณ , ํค ๋ฒ์์ ๋ฐ๋ผ์ ์์ ๋ ธ๋๋ฅผ ์ ํํ๋ฉฐ ํ์์ ์งํํ๋ ์ ์ด๋ค.
์ฌ๋ฌ ํค๋ค์ ๋ฐฐ์ด๋ก ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ์ด๋ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค. ex) [30, 70, 95]
์ ์ด๋ฏธ์ง์์ 21์ด๋ผ๋ ํค๋ฅผ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
๋ฃจํธ ๋
ธ๋๋ [30, 70]์ด๊ธฐ์, ์์ ํฌ์ธํฐ๋ 3๊ฐ๋ฅผ ๊ฐ์ง๋ค.
[30 | 70]
/ | \
P0 P1 P2
์ฐพ๊ณ ์ ํ๋ ํค๊ฐ 30๋ณด๋ค ์์ผ๋ฏ๋ก, P0 ์ฆ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ด๋ํ๋ค. (= [8, 25]
)
[8 | 25]
/ | \
P0 P1 P2
8, 25 ์ค์ ์ฐพ๋ ๊ฐ์ธ 21์ด ์์ผ๋ฏ๋ก ๋ค์ ์์ ๋ ธ๋๋ก ํ์์ ์งํํ๋ค. ์ด๋ฅผ ์ํด ์์ ๋์ผํ๊ฒ ๋ช ๋ฒ์งธ ์์์ผ๋ก ์ด๋ํ ์ง ํ๋จํ๋ค.
์ด๋ฒ์๋ 8 < 21 < 25 ์ด๋ฏ๋ก, ๋ ๋ฒ์งธ ์์ ๋
ธ๋๋ก ์ด๋ํ๋ค. (= [15, 21, 23]
)
ํด๋น ๋ ธ๋์ ํค๋ค ์ค์์ 21์ด ์กด์ฌํ๋ฏ๋ก ํ์์ ์ข ๋ฃํ๋ค.
๐ง๐ปโ๐ป ์ด๋ ๋ฏ 3๋ฒ์ ๊ณผ์ ๋ง์ผ๋ก ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์์๋ค. ๋ง์ฝ ์ด๋ฅผ ์ ํ์ ์ผ๋ก ํ์ํ๋ค๋ฉด ์ด๋ฏธ์ง ์ ์ต์ ์ ๊ฒฝ์ฐ์๋ 29๋ฒ ํ์์ด ์ด๋ฃจ์ด์ก์ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ๊ฒฝ์ฐ์์๋ B-Tree๊ฐ ์ ํ ํ์๋ณด๋ค ์ฝ 10๋ฐฐ ๋น ๋ฅด๋ค๊ณ ๋งํ ์ ์์๊น? ๊ทธ๋ ๊ฒ ๋จ์ํ๊ฒ ๊ณ์ฐํ ์๋ ์๋ค.
์ฐ์ ์ ํ ํ์์ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ ์์ด ๋จ์ํ ๋น๊ต๋ง ๊ณ์ํด์ ์งํํ๋ค. ๋น๊ตํ๋ฉฐ ๊ฐ์ ๊ฐ์ด ์๋๋ฉด ๋ค์ row๋ก ๋์ด๊ฐ๊ณ , ๊ฐ๋ค๋ฉด ํ์์ ์ข ๋ฃํ๋ ์์ด๋ค.
๋ฐ๋ฉด B-Tree ํ์์ ๊ฒฝ์ฐ์๋ ํ๋์ ๋ ธ๋ ๋ด์์ ํค๋ฅผ ๋น๊ตํ ๋ค, ํด๋น ํค ๋ฒ์์ ๋ง๋ ์์ ๋ ธ๋๋ก ๋ด๋ ค๊ฐ๋ฉฐ ํ์์ ์งํํ๋ค.
์ค์ง์ ์ธ ์ฑ๋ฅ ์ฐจ์ด๋ ์ด๋ฐ ์ฐ์ฐ ์์ฒด๋ณด๋ค๋, ๋์คํฌ ์ ๊ทผ ํ์์์ ๋ฐ์ํ๋ค.
RDBMS์์๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ํ์ด์ง(๋ธ๋ก) ๋จ์๋ก ์ ์ฅํ๋๋ฐ, ์ธ๋ฑ์ค๋ ์ด๋ฅผ ๊ณ ๋ คํด "ํ๋์ ๋
ธ๋ == ํ๋์ ํ์ด์ง" ๊ตฌ์กฐ๋ก ์ค๊ณ๋๋ค.
๋ฐ๋ผ์ B-Tree๋ ํธ๋ฆฌ์ ๊น์ด๋งํผ๋ง ๋์คํฌ I/O๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๋ฐ๋ฉด ํ
์ด๋ธ์์ ๋จ์ํ ์ ํ ํ์์ ์ํํ๋ฉด, row๋ค์ด ์ฌ๋ฌ ํ์ด์ง์ ๋๋์ด ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ต์
์ ๊ฒฝ์ฐ row ์๋งํผ ๋์คํฌ I/O๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
(๋จ, ์ค์ ๋ก๋ ํ ํ์ด์ง๊ฐ 16KB์ด๋ฏ๋ก ์ฌ๋ฌ row๊ฐ ๋ด๊ธธ ์ ์์ด ํญ์ ๊ทธ๋ ๊ฒ ๋์ง ์๋๋ค.)
๐ง๐ปโ๐ป ์ ๋ฆฌํ์๋ฉด ๋์คํฌ I/O ๋ฐ์ ํ์๋ฅผ ์ค์ด๋ ๊ฒ์ด DB ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํ๋ฉฐ,
B-Tree๋ ์ด๋ฌํ I/O ๋น์ฉ์ ํธ๋ฆฌ ๊น์ด ์์ค์ผ๋ก ์ ํํจ์ผ๋ก์จ ํฐ ์ฑ๋ฅ์์ ์ด์ ์ ์ ๊ณตํ๋ค.
B-Tree๋ ๊ท ํ ํธ๋ฆฌ๋ก, ํญ์ ๋ฃจํธ -> ๋ฆฌํ ๋ ธ๋๋ก์ ๊ฑฐ๋ฆฌ๊ฐ ๋์ผํ๋ค.
ํ์ง๋ง ์ฝ์ & ์ญ์ ์ฐ์ฐ์ด ์งํ๋จ์ ๋ฐ๋ผ ์ด๋ฌํ ๊ท ํ์ ๊นจ์ง ์๊ฐ ์๋ค. ๋๋ฌธ์ B-Tree๋ ์์ฒด์ ์ผ๋ก ๊ท ํ์ ๋ง์ถ๋ ์์ ์ ์งํํ๋ค.
B-Tree๋ ํธ๋ฆฌ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด์ ์ฝ์ & ์ญ์ ์ ์๋์ ๊ณผ์ ์ ์ํํ๊ฒ ๋๋ค.
<25 ์ฝ์ >
[10, 20, 30] + 25
โ [10, 20, 25, 30]
โ ์ค๊ฐ๊ฐ 20์ ๋ถ๋ชจ๋ก ์ฌ๋ฆฌ๊ณ [10], [25, 30]์ผ๋ก ๋ถํ
๐ง๐ปโ๐ป ์ด ์์ ์ ์ต์ ์ ๊ฒฝ์ฐ ๋ฃจํธ๊น์ง ์ ํ๋๋ฉฐ, ๋ง์ฝ ๋ฃจํธ๊น์ง ๋ถํ ๋๋ฉด ํธ๋ฆฌ์ ๋์ด๊ฐ 1 ์ฆ๊ฐํ๊ฒ ๋๋ค.
๐ ๋น์ฉ: O(log N) (ํธ๋ฆฌ ๊น์ด๋งํผ ๋ถํ ์ ํ)
<10 ์ญ์ >
[10, 15] - 10
โ [15] โ ์ต์ ํค ๊ฐ์ ๋ฏธ๋ฌ (์ธ๋ํ๋ก์ฐ)
โ ํ์ ๋ ธ๋์์ ํค๋ฅผ ๋น๋ฆฌ๊ฑฐ๋, ๋ณํฉํ์ฌ ๊ท ํ ์ ์ง
๐ง๐ปโ๐ป ์ด ์์ ์ ์ต์ ์ ๊ฒฝ์ฐ ๋ฃจํธ๊น์ง ์ ํ๋๋ฉฐ,
๋ง์ฝ ๋ฃจํธ ๋ ธ๋๊ฐ ๋น๊ฒ ๋๋ฉด ํธ๋ฆฌ์ ๋์ด๊ฐ 1 ๊ฐ์ํ๊ฒ ๋๋ค.๐ ๋น์ฉ: O(log N) (์ฌ๊ท์ ์ผ๋ก ๋ณํฉ/์ฌ๋ถ๋ฐฐ ์ ํ)
์ญ์ ์ฐ์ฐ ๊ณผ์ ์์, ์ต์ ํค ๊ฐ์ ๋ฏธ๋ฌ(์ธ๋ํ๋ก์ฐ)์ผ ๊ฒฝ์ฐ์๋ ์ฌ๋ถ๋ฐฐ๋ ๋ณํฉ์ด ํ์ํ๋ค๊ณ ํ์๋ค.
์ฌ๊ธฐ์ ์ต์ ํค ๊ฐ์๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ํด์ง๋ ๊ฒ์ผ๊น?
B-Tree๋ "๋ฃจํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋
ธ๋๋ ์์์ด ์ต์ โM / 2โ๊ฐ ์ด์์ด์ด์ผ ํ๋ค" ๋ ํต์ฌ ์ ์ฝ์ด ์กด์ฌํ๋ค.
์ด๋ ๋
ธ๋๊ฐ ๋๋ฌด ๋น์ด ์์ผ๋ฉด ํธ๋ฆฌ ๋์ด๊ฐ ๋ถํ์ํ๊ฒ ์ฆ๊ฐํ๋ฉฐ, ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ๊ธฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ฆฌํ์๋ฉด B-Tree์์ ๋ฃจํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ์์ ์๊ฐ ์ต์ โM / 2โ๊ฐ ์ด์์ด์ด์ผ ํ๋ฉฐ,
์ด์ ๋ฐ๋ผ ํค ๊ฐ์๋ โM / 2โ - 1๊ฐ ์ด์์ด์ด์ผ ํ๋ค.
์ฐ์ฐ | ์๊ฐ ๋ณต์ก๋ | ์ค๋ช |
---|---|---|
๊ฒ์ (Search) | O(log N) | ํธ๋ฆฌ ๋์ด๋งํผ ํ์ (๊ท ํ ์ ์ง๋จ) |
์ฝ์ (Insert) | O(log N) | ๋ฆฌํ ๋ ธ๋๊น์ง ๋ด๋ ค๊ฐ ํ, ํ์ ์ ๋ถํ |
์ญ์ (Delete) | O(log N) | ์ธ๋ํ๋ก์ฐ ๋ฐ์ ์ ๋ณํฉ/์ฌ๋ถ๋ฐฐ ์ํ |
B-Tree๋ ๋ชจ๋ ์ฐ์ฐ์ ๋ํด์ O(log N)
์ด๋ผ๋ ๊ท ์ผํ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ค.
B+Tree์ B-Tree์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์, ์ค์ง์ ์ธ ๊ฐ ์ฆ ๋ฐ์ดํฐ๊ฐ ๋ฆฌํ ๋ ธ๋์๋ง ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ Linked List
์ฒ๋ผ ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋์ง ์๊ธฐ ๋๋ฌธ์, ๋ธ๋์น ๋ ธ๋๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํ๋ณดํจ์ผ๋ก์จ ๋ ๋ง์ ํค๋ค์ ์์ฉํ ์ ์๋ค.
ํ๋์ ๋ ธ๋์ ์์ญ ~ ์๋ฐฑ ๊ฐ์ ํค๋ค์ ๋ด์ ์ ์๊ธฐ์ ํธ๋ฆฌ์ ๋์ด๊ฐ ๋์ฑ ๋ฎ๊ฒ ์ ์ง๋ ์ ์๋ ๊ฒ์ด๋ค.
- ํ ์ค์บ ์, B+Tree๋ ๋ฆฌํ ๋ ธ๋์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์ ํํ์๋ง ํ๋ฉด ๋๋ค.
ํ์ง๋ง B-Tree์ ๊ฒฝ์ฐ์๋ ์ค๊ฐ ๋ ธ๋๊น์ง ํฌํจํ์ฌ ์ ์ฒด ๋ ธ๋๋ฅผ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํจ์ฌ ๋๋ฆฌ๋ค.
InnoDB์์์ B+Tree๋ ์์์ ์ค๋ช ํ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ณต์กํ ๋ชจ์ต์ ๋ณด์ธ๋ค. (์ด ๋ํ ๋งค์ฐ ๋จ์ํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค)
์ด์ ๋ํด์๋ ์ง์์ด ์งง์ ์ถํ ํ์ต ํ์ ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. ๊ถ๊ธํ๋ค๋ฉด ํด๋น ๋ธ๋ก๊ทธ ๊ธ์ ์ฝ์ด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค!
์ต์ข ์ ์ผ๋ก B-Tree์ B+Tree์ ์ฐจ์ด์ ์ ์ ๋ฆฌํ์๋ฉด ์๋์ ๊ฐ๋ค.
ํญ๋ชฉ | B-Tree | B+Tree |
---|---|---|
๋ฐ์ดํฐ ์ ์ฅ ์์น | ๋ด๋ถ ๋ ธ๋์ ๋ฆฌํ ๋ ธ๋ ๋ชจ๋์ ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ | ๋ฆฌํ ๋ ธ๋์๋ง ๋ฐ์ดํฐ ์ ์ฅ |
๋ด๋ถ ๋ ธ๋ ์ญํ | ๋ฐ์ดํฐ๋ ์ ์ฅํ๋ฉฐ ํ์ ์ญํ ๋ ์ํ | ํ์(์ธ๋ฑ์ค) ์ญํ ๋ง ์ํ |
๋ฆฌํ ๋ ธ๋ ์ฐ๊ฒฐ | โ ์์ | โ ๋ฆฌํ ๋ ธ๋๋ผ๋ฆฌ ์ฐ๊ฒฐ (Linked List ๊ตฌ์กฐ) |
์ ์ฒด ์ํ ์ฑ๋ฅ | ๋นํจ์จ์ (๋ชจ๋ ๋ ธ๋ ์ํ ํ์) | ํจ์จ์ (๋ฆฌํ๋ง ์์ฐจ ํ์) |
๋ฒ์ ๊ฒ์ ์ฑ๋ฅ | ๋๋ฆผ | ๋น ๋ฆ (๋ฆฌํ ๋ ธ๋ ์ฐ์ ์ ๊ทผ ๊ฐ๋ฅ) |
์ธ๋ฑ์ค ํฌ๊ธฐ | ์๋์ ์ผ๋ก ํฌ๊ณ ๊น์ด๊ฐ ๋ ํด ์ ์์ | ๋ด๋ถ ๋ ธ๋๊ฐ ๊ฐ๋ฒผ์์ ธ ๋ ๋ฎ์ ํธ๋ฆฌ ๋์ด ์ ์ง ๊ฐ๋ฅ |
์ฌ์ฉ ์ฌ๋ก | ์ด๋ก ๊ตฌ์กฐ / ์ผ๋ถ ํ์ ์ค์ฌ ์์คํ | โ MySQL InnoDB ์ธ๋ฑ์ค, ํ์ผ ์์คํ ๋ฑ ์ค๋ฌด์์ ๋๋ฆฌ ์ฌ์ฉ๋จ |