๐ CS/๐ฆ DB
[DB] ์ธ๋ฑ์ค๋? B+Tree ๊ตฌ์กฐ๋ถํฐ ์ค์บ ๋ฐฉ์๊น์ง ์ ๋ฆฌ
carrot0911
2025. 7. 29. 16:04
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค(Idex)๋ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก, ์ฑ ์ ์์ธ(index)์ฒ๋ผ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํ ๋๊ตฌ์ด๋ค.
์ ๋ ฌ๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์กฐํ ์ฑ๋ฅ์ ๋ฐ์ด๋์ง๋ง, INSERT, UPDATE, DELETE ์์๋ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
(์ ๋ ฌ ์ ์ง์ ์ฌ๊ตฌ์ฑ ๋น์ฉ ๋๋ฌธ)
โ ์ธ๋ฑ์ค๋ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ก ๊ตฌํ๋ ๊น?
๋๋ถ๋ถ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)๋ B-Tree ๋๋ B+Tree ๊ธฐ๋ฐ ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
(MySQL์ InnoDB ์คํ ๋ฆฌ์ง ์์ง ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ ์์ )
๐ณ B+Tree ์ธ๋ฑ์ค ๊ตฌ์กฐ
- B+Tree๋ B-Tree์ ๋ณํ์ผ๋ก ๋ชจ๋ ์ค์ ๋ฐ์ดํฐ(๋ ์ฝ๋ ์์น)๋ ๋ฆฌํ ๋ ธ๋์๋ง ์กด์ฌ
- ํญ์ ์ ๋ ฌ๋ ์ํ ์ ์ง
(→ ๋ฒ์ ์กฐํ๊ฐ ๋น ๋ฅด๋ค, ์์ฐจ ์ ๊ทผ์ด ์ฉ์ดํ๋ค.)
๐ฆ ๊ตฌ์กฐ ๊ตฌ์ฑ
- ๋ฃจํธ ๋ ธ๋(Root Node) : ์ต์์ ๋ ธ๋, ๊ฒ์ ์์ ์ง์
- ๋ธ๋์น ๋ ธ๋(Branch Node) : ์ค๊ฐ ๋ ธ๋, ํ์ ๊ฒฝ๋ก
- ๋ฆฌํ ๋ ธ๋(Leaf Node) : ์ค์ ๋ ์ฝ๋ ์ฃผ์ ๋๋ PK ๊ฐ ์ ์ฅ
๐ InnoDB ๊ธฐ์ค ํน์ง
- ํด๋ฌ์คํฐ ์ธ๋ฑ์ค(Primary Key Index) : ๋ฆฌํ ๋ ธ๋์ ์ค์ ๋ ์ฝ๋ ์ ์ฒด๋ฅผ ์ ์ฅ
- ๋ณด์กฐ ์ธ๋ฑ์ค(Secondary Index) : ๋ฆฌํ ๋ ธ๋์ ํด๋น ๋ ์ฝ๋์ PK ๊ฐ๋ง ์ ์ฅ → ๋ค์ PK ์ธ๋ฑ์ค๋ฅผ ํ๋ฒ ๋ ํ์ผ ํ๋ค. (์ธ๋ฑ์ค ๋๋ธ ์ค์บ ๋ฐ์)
๐ ์ธ๋ฑ์ค ์ค์บ ๋ฐฉ์ ์ ๋ฆฌ
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ๊ฒ์ ์, MySQL์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ค.
1๏ธโฃ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ (Index Range Scan)
- ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฒ์ ๋ฒ์๊ฐ ์ ํด์ง ๊ฒฝ์ฐ
- ์์ ๋ฆฌํ ๋ ธ๋๋ถํฐ ์กฐ๊ฑด ๋ง์กฑํ๋ ํค๊น์ง ์์ฐจ์ ์ผ๋ก ์ค์บ
- index seek → index scan → ๋ฐ์ดํฐ ์กฐํ ์์ผ๋ก ๋์
- ๋๋ค IO ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- ๋ฒ์ ์กฐ๊ฑด (BETWEEN, >=, <)์ ์ ํฉ
- ๊ฐ์ฅ ๋น ๋ฅธ ์ค์บ ๋ฐฉ์
2๏ธโฃ ์ธ๋ฑ์ค ํ ์ค์บ (Index Full Scan)
- ์ธ๋ฑ์ค ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ๋ ๋ฐฉ์
- ์ธ๋ฑ์ค ์กฐ๊ฑด์ด ์ ์ปฌ๋ผ์ด ์๋ ์ค๊ฐ(B, C ๋ฑ) ์ปฌ๋ผ์ผ๋ก ๊ฒ์ ์ ๋ฐ์
- ์ธ๋ฑ์ค๋ ์ฌ์ฉํ์ง๋ง → ์ค์ ๋ ์ฝ๋๋ ์ ์ฝ์ ์๋ ์๋ค.
- ํ ํ ์ด๋ธ ์ค์บ๋ณด๋ค๋ ์ฑ๋ฅ ์ข์ ์ ์๋ค.
3๏ธโฃ ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ (Loose Index Scan)
- ํ์ํ ์ผ๋ถ ํค๋ง ๊ฑด๋๋ฐ๋ฉฐ ์ ํ์ ์ผ๋ก ์ค์บ
- ์ค๊ฐ ๋ถํ์ํ ์ธ๋ฑ์ค ํค๋ ์๋ต
- GROUP BY, MIN(), MAX() ๋ฑ ์ต์ ํ ์ฌ์ฉ
- ํ์ดํธ ์ค์บ(์์ฐจ์ ) ๋ฐฉ์๊ณผ ๋๋น๋๋ ๊ฐ๋
๐ฅ ์ธ๋ฑ์ค ์ฌ์ฉ ์ ์ฅ๋จ์ ์์ฝ
๊ตฌ๋ถ | ์ฅ์ | ๋จ์ |
์กฐํ ์ | ๋น ๋ฅธ ๊ฒ์, ์ ๋ ฌ ํจ์จ์ | - |
์ฝ์ /์์ /์ญ์ ์ | - | ์ ๋ ฌ ์ ์ง ๋น์ฉ, ์ธ๋ฑ์ค ๊ฐฑ์ ํ์๋ก ์ฑ๋ฅ ์ ํ |
๋๋ฌด ๋ง์ ์ธ๋ฑ์ค | - | ์ธ๋ฑ์ค ์ ์ง ๋น์ฉ ์ฆ๊ฐ, ์ฟผ๋ฆฌ ์ฑ๋ฅ ์คํ๋ ค ์ ํ ๊ฐ๋ฅ |
๐ง ์์ฝ ํค์๋
ํญ๋ชฉ | ํค์๋ |
์๋ฃ๊ตฌ์กฐ | B+Tree, ๋ฆฌํ ๋ ธ๋์ ์ค์ ๋ ์ฝ๋(PK) |
์ธ๋ฑ์ค ์ข ๋ฅ | ํด๋ฌ์คํฐ ์ธ๋ฑ์ค(Primary), ๋ณด์กฐ ์ธ๋ฑ์ค(Secondary) |
์ค์บ ๋ฐฉ์ | Range Scan, Full Scan, Loose Scan |
๋จ์ | INSERT/UPDATE/DELETE ์ฑ๋ฅ ์ ํ, ๊ณต๊ฐ ๋ญ๋น ๊ฐ๋ฅ |
๐ ๋ง๋ฌด๋ฆฌ ์์ฝ
์ธ๋ฑ์ค๋ฅผ ์กฐํ ์ฑ๋ฅ์ ๋์ด๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ง๋ง ์๋ชป ์ค๊ณ๋๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ์ ์๋ค.
์ธ๋ฑ์ค๊ฐ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ก ๋์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ค์บ ๋ฐฉ์์ด ์ด๋ค ์ํฉ์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง๋ฅผ ์๋ ๊ฒ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ์ง์์ด๋ค.