๐ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค, ๋ง์ด ๋ค์ด๋ง ๋ดค์ง ์ ๋ฆฌ ์ข ํ์ !
๋ ธ์ ์์ ๋ณด๊ธฐ
๐ ์ธ๋ฑ์ค๋ ?
- Index ๋, RDBMS์์ ๊ฒ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํ ๊ธฐ์
- TABLE ์ ์ปฌ๋ผ์ **์์ธํ(๋ฐ๋ก ํ์ผ๋ก ์ ์ฅ)**ํ์ฌ→ **๊ฒ์ ์๋๋ฅผ ํฅ์**์ํจ๋ค.
- → ๊ฒ์์ ํด๋น ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ Full Scan ํ๋ ๊ฒ์ด ์๋, **์์ธํ ๋์ด์๋ INDEX ํ์ผ์ ๊ฒ์**ํ์ฌ
- ์ธ๋ฑ์ค ์๋ฃ๊ตฌ์กฐ๋ก๋ Hash Table, B-Tree ์์ ํ์๋ B+Tree
โ์ธ๋ฑ์ค ํ์์ฑ
- ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก๋ถํฐ ๊ฐ์ ธ์ฌ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ ๋น ๋ฅธ ์๋๋ก ์กฐํ/๊ฒ์ ํ์
- ๊ธฐ์กด์ item_info ํ
์ด๋ธ์ ์กด์ฌํ๋ total row = 2846 ๊ฐ์ด๋ฉฐ, ์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฝ์ฐ ์ ์ฒด row ๊ฐ์์ ํด๋นํ๋ 2846 ๊ฐ์ row ๊ฐ ์กฐํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค๋ฉด ํ
์ด๋ธ ๋ด์์ ์ ์ฒด ์ค์บ์ ํตํด ์กฐํํด์ผ ํจ(Full Table Scan)
- **Full Scan, Table Scan**
- SQL ์๋ฒ์์๋ ๋ฐ์ดํฐ ๋ ์ฝ๋๊ฐ ๋ด๋ถ์ ์ผ๋ก ์๋ฌด๋ฐ ์์์์ด ์ ์ฅ๋๋ค.
- ์ด๋ ๋ฐ์ดํฐ ์ ์ฅ ์์ญ์ Heap ์ด๋ผ๊ณ ํ๋ฉฐ,→ Full Scan, Table Scan
- Heap ์์๋ ์ธ๋ฑ์ค๊ฐ ์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ ์ฒด ๋ฐ์ดํฐ ํ์ด์ง์ ์ฒ์ ๋ ์ฝ๋๋ถํฐ ~ ๋ ํ์ด์ง์ ๋ง์ง๋ง ๋ ์ฝ๋๊น์ง ๋ชจ๋ ์กฐํํ์ฌ ๊ฒ์ ์กฐ๊ฑด๊ณผ ๋น๊ต ํ๋ค
- ๋ง์ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ์ผ๋ถ๋ง ์ฐพ์ ๋ Full Scan ์ ํ ๊ฒฝ์ฐ, ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ์ ๋นํจ์จ์ ์ด๋ฏ๋ก ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ์ฌ SELECT ๊ฒ์ ์ฑ๋ฅ์ ๋์ด๋๋ก ํ๋ค.
- ์๋์ ๊ฐ์ด Explain ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ, ๊ฒ์๋ ROW ๋ ์๋์ ๋ํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- **Full Scan, Table Scan**
- ๊ธฐ์กด์ item_info ํ
์ด๋ธ์ ์กด์ฌํ๋ total row = 2846 ๊ฐ์ด๋ฉฐ, ์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฝ์ฐ ์ ์ฒด row ๊ฐ์์ ํด๋นํ๋ 2846 ๊ฐ์ row ๊ฐ ์กฐํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค๋ฉด ํ
์ด๋ธ ๋ด์์ ์ ์ฒด ์ค์บ์ ํตํด ์กฐํํด์ผ ํจ(Full Table Scan)
- ์ธ๋ฑ์ค๋ **๋ฉ๋ชจ๋ฆฌ**์ ์ ์ฅ
๐ ์ธ๋ฑ์ค์ ์๋ฃ๊ตฌ์กฐ์ ์๋ฆฌ
๐๏ธ ํด์ ํ ์ด๋ธ(Hash Table)
- ํด์ ํ ์ด๋ธ์ (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ ์ ์ฉ
- ํด์ ํ ์ด๋ธ์ Key ๊ฐ์ ์ด์ฉํด ๊ณ ์ ํ Index ๋ฅผ ์์ฑํด → ๊ทธ Index ์ ์ ์ฅ๋ ๊ฐ์ ๊บผ๋ด์ค๋ ๊ตฌ์กฐ
- ํด์ ํ
์ด๋ธ ๊ธฐ๋ฐ์ DB ์ธ๋ฑ์ค๋ (๋ฐ์ดํฐ = ์ปฌ๋ผ์ ๊ฐ, ๋ฐ์ดํฐ ์์น) ๋ฅผ **(Key, Value)**๋ก ์ฌ์ฉ
- ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ํด์ ํจ์๋ฅผ ๊ฑฐ์ณ ์์ฑ๋ ํด์๋ฅผ ํตํด ์ธ๋ฑ์ค ๊ตฌํ → ๋ฒํท ๋ฐฐ์ด์ ์ธ๋ฑ์ค
- ๋ด๋ถ์ ์ผ๋ก **๋ฐฐ์ด(๋ฒํท)**์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- buckets[Index] = ๋ฐ์ดํฐ
- ํด์ ํ ์ด๋ธ์ ํ๊ท ์๊ฐ ๋ณต์ก๋ = O(1)
ํด์ ์ธ๋ฑ์ค ์ฅ์
- ํด์ ํ ์ด๋ธ์ ์๊ฐ๋ณต์ก๋ = O(1)
- → ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์ ๊ฐ๋ฅ
ํด์ ์ธ๋ฑ์ค ๋จ์
- ๊ฒ์์ ์ํ ํด์ ์ธ๋ฑ์ค์์๋, ์ถฉ๋์ด ๋ง์ด ๋ฐ์ํ ์๋ก ๊ฒ์ ํจ์จ ์ ํ
- ์ถฉ๋ : ์ ๋ ฅ ๊ฐ์ด ๋ค๋ฅด์ง๋ง, ๊ฒฐ๊ณผ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ, ์ฆ ์ ๋ ฅ ๊ฐ์ ๋ค๋ฅด์ง๋ง ํด์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ
- ํด์ ํจ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฒ์๊ฐ ์ข์ผ๋ฉด → ํ์ํ ๋ฒํท ์๊ฐ ๊ฐ์ → But, ์ถฉ๋์ด ๋ง์ด ๋ฐ์
- ํด์ ํจ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฒ์๊ฐ ๋์ผ๋ฉด → ํ์ํ ๋ฒํท ์๊ฐ ์ฆ๊ฐ → But, ์ถฉ๋ ๋ฐ์ ๊ฐ์
- ๋ฐ์ดํฐ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, Chaining ์ ์ฐ๊ฒฐ๋ ๋ฆฌ์คํธ๋ค๊น์ง ๊ฒ์ํด์ผ ํ๋ฏ๋ก O(N) ๊น์ง ์๊ฐ๋ณต์ก๋ ์ฆ๊ฐ ๊ฐ๋ฅ
- ํด์ ํ
์ด๋ธ์ ์ถฉ๋์ ์ํ ๋ฌธ์ ํด๊ฒฐ - ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ(Separate Chaining) & ๊ฐ๋ฐฉ ์ฃผ์๋ฒ(Open Addressing)
- ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ : ๋์ผํ ๋ฒํท์ ๋ฐ์ดํฐ์ ๋ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด “์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ”๋ฅผ ์ฌ์ฉํด → ๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ๊ฐ๋ฐฉ ์ฃผ์๋ฒ : “๋น์ด์๋ ํด์ ํ
์ด๋ธ์ ๊ณต๊ฐ”์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
- Linear Probing : ํ์ฌ ๋ฒํท index ๋ก๋ถํฐ ๊ณ ์ ํญ ๋งํผ์ฉ ์ด๋ํด → ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด์๋ ๋ฒํท์ ๋ฐ์ดํฐ ์ ์ฅ
- Quadratic Probing : ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์
- Ex) ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, 1๋งํผ ์ด๋ → ๊ทธ ๋ค์ ์ถฉ๋์ด๋ฐ์ํ ๊ฒฝ์ฐ 2^2 → 2^3 ๋งํผ์ฉ ์ด๋
- Double Hashing Probing : ํด์๋ ๊ฐ์ ํ ๋ฒ ๋ ํด์ฑํ์ฌ → ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์
- ํด์๋ ๊ฐ์ ํ ๋ฒ ๋ ํด์ฑํด ์๋ก์ด ๊ฐ์ ํ ๋น → ๋ ๋ง์ ์ฐ์ฐ ํ์
- Open Addressing ์์ ๋ฐ์ดํฐ ์ญ์ ์ → ์ญ์ ๋ ๊ณต๊ฐ์ Dummy Space๋ก ํ์ฉ
- Hash Table์ ์ฌ์ ๋ฆฌ ํ๋ ์์ ํ์
- ํด์๊ฐ ๋ฑํธ(=) ์ฐ์ฐ์๋ง ํนํ๋์ด ์์
- ํด์ ํจ์์ ๊ฐ์ด 1์ด๋ผ๋ ๋ฌ๋ผ์ง๋ฉด → ๋ค๋ฅธ ํด์ ๊ฐ์ ์์ฑ
- ๋ถ๋ฑํธ ์ฐ์ฐ(>, <) ์ด ์์ฃผ ์ฌ์ฉ๋๋ DB ๊ฒ์์๋ ํด์ ํ ์ด๋ธ์ด ์ ํฉํ์ง ์์
- Ex) “๋๋ ~” ์ผ๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ฌธ → ์ธ๋ฑ์ค์ ํํ์ ๋ฐ์ง ๋ชปํจ
ํด์ ํ ์ด๋ธ(Hash Table) Vs ํด์๋งต(HashMap)
- ๋ ์๋ฃ๊ตฌ์กฐ์ ์ฐจ์ด๋ “๋๊ธฐํ ์ง์ ์ฌ๋ถ”
- ํด์ ํ
์ด๋ธ : ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด์ ์์์ ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ์ํฉ์์ ์ฌ์ฉ
- ํด์ํ ์ด๋ธ์ put ์๋ synchronized ํค์๋๊ฐ ๋ถ์
- ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์์ ๋๊ธฐํ ์ง์
- ํด๋น ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ ์๊ฐ์ด ์กฐ๊ธ ์ง์ฐ๋จ
- ํด์๋งต : ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๊ฑฐ๋, ์์์ ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ์ง ์๋ ์ํฉ์ ์ฌ์ฉ
๐ฒ B-Tree
B-Tree ๋?
- ์ด์งํธ๋ฆฌ์ ์ ์ฌํ์ง๋ง, ์ด์งํธ๋ฆฌ์ ๋ฌ๋ฆฌ ์์ ๋
ธ๋๊ฐ 2๊ฐ ์ด์ ๊ฐ๋ฅํ ๊ตฌ์กฐ
- ๊ฐ์ฅ ์๋จ์ ๋ ธ๋ = ๋ฃจํธ ๋ ธ๋(Root Node)
- ์ค๊ฐ ๋ ธ๋ = ๋ธ๋ํฐ ๋ ธ๋(Branch Node)
- ๊ฐ์ฅ ์๋ ๋ ธ๋ = ๋ฆฌํ ๋ ธ๋(Leaf Node)
- ์์ง์ ํ์๊ณผ ์ํ์ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง
- ์์ง์ ํ์ : ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ์ฐพ์๊ฐ
- ์ํ์ ํ์ : ๋ฆฌํ ๋ ธ๋์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ธ๋๋ฅผ ์ฐพ์๋๊ฐ
- ์ด์ง ๊ฒ์ ํธ๋ฆฌ์ฒ๋ผ ๊ฐ Key ์ ์ผ์ชฝ ์์์ ํญ์ Key ๋ณด๋ค ์์ ๊ฐ์ / ์ค๋ฅธ์ชฝ ์์์ Key ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง
- B-Tree ์ Key-Value ๊ฐ์ ํญ์ Key ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ๋ถ๋ฑํธ ์ฐ์ฐ์ ๋ํด ํด์ ํ ์ด๋ธ๋ณด๋ค ํจ์จ์ ์ธ ํ์ ๊ฐ๋ฅ
- ํ๊ท ์๊ฐ ๋ณต์ก๋ = O(logN)
- Inno DB Storage Engine : ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ๋จ์๋ฅผ ํ์ด์ง๋ก ๊ด๋ฆฌ
- ํ์ด์ง : ๋์คํฌ์ ์ฝ๊ธฐ, ์ฐ๊ธฐ ์ต์ ๋จ์
- ์ธ๋ฑ์ค๋ ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌ
- Range Scan
- Leaf ๋ธ๋ก์์ ์ค์บ ์์์ ์ ์ฐพ์ → ์ค์บ์ ํ๋ค๊ฐ, ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ Scan ์ ์ข ๋ฃ
- Full Scan์ ๋นํด ํจ์จ์ ์
B-Tree ํน์ง
- ๊ท ํํธ๋ฆฌ
- “๊ท ํํธ๋ฆฌ"๋, ๋ฃจํธ๋ก๋ถํฐ ๋ฆฌํ ๋๋๊น์ง ๊ฑฐ๋ฆญ ใ ์ผ์ ํ ํธ๋ฆฌ ๊ตฌ์กฐ
- ํธ๋ฆฌ ์ค์์ ์ฑ๋ฅ์ด ์์ ํ ๋์ด์์
- B-Tree ์ฒ์ ์์ฑ ๋น์ - ๊ท ํ ํธ๋ฆฌ์ด์ง๋ง,
- ํ ์ด๋ธ ๊ฐฑ์ (INSERT/UPDATE/DELETE)์ ๋ฐ๋ณต์ ํตํด ์์ํ ๊ท ํ์ด ๊นจ์ง๊ณ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
→ ์ด๋ ์ ๋ ์๋์ผ๋ก ๊ท ํ์ ํ๋ณตํ๋ ๊ธฐ๋ฅ๋ ์์ง๋ง,
→ ๊ฐฑ์ ๋น๋๊ฐ ๋์ ํ ์ด๋ธ์ ์์ฑ๋๋ ์ธ๋ฑ์ค๋ - ์ธ๋ฑ์ค ์ฌ๊ตฌ์ฑ์ ํตํด ํธ๋ฆฌ์ ๊ท ํ ํ๋ณต ํ์
Key ๊ฒ์ ๊ณผ์
- ์ด์ง ๊ฒ์ ํธ๋ฆฌ์ ์ฑ์ง์ ์ด์ฉํด ํํฅ์์ผ๋ก ๊ฒ์ ์ํ
- ์ด์ง ๊ฒ์ ํธ๋ฆฌ : ๊ฐ Key ๋ค์ ์ผ์ชฝ ์์์ ํญ์ Key ๋ณด๋ค ์์ ๊ฐ์, ์ค๋ฅธ์ชฝ์ ํฐ ๊ฐ์ ๊ฐ์ง
B-Tree ์ธ๋ฑ์ค ์ฅ์
- ๊ท ์ผ์ฑ
- ์ด๋ค ๊ฐ์ ๋ํด์๋ ๊ฐ์ ์๊ฐ(=O(logN))์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค
- ๋ฐ์ดํฐ ์์ ๋น๋ํด ์ฒ๋ฆฌ ์๊ฐ ์๋ ์์น
- ํ ์ค์บ : ํ ์ด๋ธ ํฌ๊ธฐ์ ๋น๋กํ๋ ํํ๋ก ์ฒ๋ฆฌ ์๊ฐ ์ฆ๊ฐ
- ์ธ๋ฑ์ค : ์คํ ์๊ฐ ์ ํ๋ ๋ณดํต ์๋งํ ๊ณก์ ์ ์ด๋ฃธ
B-Tree ์ธ๋ฑ์ค ๋จ์
- Index ๊ฐ ์ ์ฉ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๊ฐฑ์ (INSERT/UPDATE/DELETE) ์ด ๋ฐ๋ณต → ํธ๋ฆฌ์ ๊ท ํ์ด ๊นจ์ง๋ฉฐ ์ฑ๋ฅ ์ ํ
- DB Index ์ปฌ๋ผ์ ๋ถ๋ฑํธ๋ฅผ ์ด์ฉํ ‘์์ฐจ ๊ฒ์ ์ฐ์ฐ' ์ด ์์ฃผ ๋ฐ์
- B-Tree ๊ฐ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด ์์ด → ํด์ ํ ์ด๋ธ ๋ณด๋ค ๋ถ๋ฑํธ๋ฅผ ์ด์ฉํ ๊ฒ์ ์ฐ์ฐ ์ฑ๋ฅ์ด ์ข์ง๋ง,
- ์์ฐจ ๊ฒ์์ ๊ฒฝ์ฐ “์ค์ ์ํ" ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ด ์ข์ง ์์
- ์์ ์์์์ ๋
ธ๋ 6์ ์ฐพ๊ธฐ ์ํด
- 7 > 3 > 8 > 1 > 9 > 4 > 10 > 0 > 11 > 5 > 2 > 6 ์์๋ก ์กฐํํด์ผ ํจ
๐ณ B+Tree
B+Tree ๋?
- **B+Tree ๋, Leaf Node ๋ง (์ธ๋ฑ์ค + ๋ฐ์ดํฐ)**๋ฅผ ํจ๊ป ๊ฐ์ง๊ณ ์๊ณ ,
- ๋๋จธ์ง ๋
ธ๋(Inner Node) ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค(Key) ๋ง์ ๊ฐ๋๋ค.
- B-Tree ์ ๊ฒฝ์ฐ, Internal(Inner, Brandch) Node ์ Key ์ Data ๋ฅผ ๋ชจ๋ ๋ด์ ์ ์๋ค.
- ๋ฆฌํ ๋
ธ๋๋ผ๋ฆฌ๋ Linked List ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- ์ฆ, ๋ฆฌํ ๋ ธ๋๋ผ๋ฆฌ๋ Linked List ๋ก ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์์ด,
- ๋ถ๋ฑํธ๋ฅผ ์ด์ฉํ ์์ฐจ ๊ฒ์ ์ฐ์ฐ ์ ์ค์ ์ํ๋ฅผ ํตํด ๋ง์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด์ผ ํ๋ B-Tree ์ ๋นํด B+Tree ๋ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ฅํ Linked List ๋ฅผ ํ ๋ฒ๋ง ํ์ํ๋ฉด ๋๋ค.
B+Tree ์ธ๋ฑ์ค ์ฅ์
- ๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋์ง ์์→ ๋ ๋ง์ Key ์์ฉ ๊ฐ๋ฅ→ Cache Hit ํฅ์ ๊ฐ๋ฅ
- → ํ๋์ ๋ ธ๋์ ๋ ๋ง์ Key ๋ฅผ ๋ด์ ์ ์์ด, ํธ๋ฆฌ์ ๋์ด๋ฅผ ๋ฎ์ถ ์ ์์
- → ๋ฉ๋ชจ๋ฆฌ ํ๋ณด ๊ฐ๋ฅ
- Full Scan ์ ๋ฆฌํ ๋
ธ๋์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์์ด → ํ ๋ฒ์ ์ ํ ํ์๋ง ํ๋ฉด ๋๋ฏ๋ก, B-Tree ์ ๋นํด ๋น ๋ฆ
- B-Tree ์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ธํด์ผ ํจ
B+Tree ์ธ๋ฑ์ค ๋จ์
- B-Tree ์ ๊ฒฝ์ฐ Best Case ์ ๋ํด์๋ ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ง ์์๋ ๊ฒ์(์กฐํ)๊ฐ ๊ฐ๋ฅํ์ง๋ง, B+Tree ์ ๊ฒฝ์ฐ ๋ฆฌํ ๋ ธ๋๊น์ง ๊ฐ์ผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค
B-Tree Vs B+Tree ์ธ๋ฑ์ค
๐ฆ์ธ๋ฑ์ค ์ข ๋ฅ
- ์ธ๋ฑ์ค๋ ํฌ๊ฒ Clustered ์ NonClustered ์ธ๋ฑ์ค๋ก ๋๋จ
Clustered Index
- Clustered Index ๋ ๋ฌผ๋ฆฌ์ ์ ๋ ฌ๋ก DB์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ ์ Clustered ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฅ์ด ๋๋ค.
- ํ ํ ์ด๋ธ์ ์ค์ง ํ๋๋ง ์กด์ฌ ๊ฐ๋ฅ
- → ํ ์ด๋ธ ๋ด์์ ORDER BY ๋ฅผ ํ์ง ์์๋, ๋ฐ์ดํฐ๊ฐ Clustered ์ธ๋ฑ์ค์ ๋ฐ๋ผ ์ ๋ ฌ์ด ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์์ด → ๊ฐ์ฅ ๋น ๋ฅธ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- Auto Increment
NonClustered Index
- NonClustered Index ๋ Clustered Index ์๋ ๋ฌ๋ฆฌ, ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง๋ฉด → ํ ํ ์ด๋ธ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ ์ ์๋ค.
- ์๋ ์ ๋ ฌ๋์ง ์๊ณ , Index ๋ฅผ ์์ฑํ ๋๋ Clustered ๊ฐ ๋์ด์์ ๋ Index Scan ์ด ์ ๋ฆฌํ๋ค.
- ์ฝํ ์ฐธ์กฐ ๊ด๊ณ → ๊ตณ์ด ์ ๋ ฌ์ ํ์ง ์์๋ ๋จ
๐ ์ธ๋ฑ์ค๋ฅผ ์ธ์ ์ฌ์ฉํ ๊น?
- SELECT / INSERT / UPDATE / DELETE ์ค SELECT ๋ฅผ ์ํํ ๋๋ ํจ๊ณผ์ ์ด์ง๋ง, ๋ค๋ฅธ DML์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ ๋ฐ์
- INSERT ๋ ์ ์ฑ๋ฅ์ ์ ํ์ํค๋๊ฐ?
- INSERT ๋ ์ ๋ ฌ์ด ๋ ์ํ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ์ด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ
- ์ด๋ ์๋ฆฌ์ INSERT ๋ฅผ ํด์ผํ๋์ง๋ฅผ ์ฐพ์ → ์ ์ฅํ๊ณ → ์๋ ์์นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ก ๋ฐ์ด์ฃผ์ด์ผ ํจ
- ๋ง์ฝ, ์ ์ฅํ ํ์ด์ง, ๋ธ๋ก์ด ๊ฝ ์ฐจ๊ฒ ๋๋ ๊ฒฝ์ฐ ๋ค์ ํ์ด์ง๋ก ์ฎ๊ฒจ์ผ ํ๋ฉฐ ์ฒ๋ฆฌํด์ผ ํ๋ ์์ ์ด ๋ ๋ง์์ง๊ฒ ๋จ
- ์ธ๋ฑ์ค๋ ํ ์ด๋ธ๊ณผ ๋ณ๋์ ๊ฐ์ฒด์ด๋ฏ๋ก, ํ ์ด๋ธ์๋ ์ฝ์ ์ ํด์ฃผ์ด์ผ ํจ
- DELETE ๋ ์ ์ฑ๋ฅ์ ์ ํ์ํค๋๊ฐ?
- DELETE ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ง์ฐ๋ ๊ฒ์ด ์๋, ์ธ๋ฑ์ค ๋ด์ ‘์ฌ์ฉ ์ ํจ’ ํ์ ์ฒ๋ฆฌ
- ๊ณต๊ฐ ๋ญ๋น ์กด์ฌ
- UPDATE ๋ ์ ์ฑ๋ฅ์ ์ ํ์ํค๋๊ฐ?
- ์ธ๋ฑ์ค์๋ UPDATE ๊ฐ๋ ์ด ์์
- UPDATE ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, DELETE ์ํ ํ → INSERT ์ฒ๋ฆฌ
- ์์ ๋ถํ ์กด์ฌ
- INSERT ๋ ์ ์ฑ๋ฅ์ ์ ํ์ํค๋๊ฐ?
- SELECT FROM WHERE ๊ณผ ๊ฐ์ด ์กฐ๊ฑด์ ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์
- ํน์ ์ด์ ๊ณ ๋ ค ๋์์์ ๋นจ๋ฆฌ ์ ๊ฑฐํ๊ธฐ ์ํด
- **์กฐ์ธ(JOIN)**์ ์คํํ ๋ ๋ค๋ฅธ ํ ์ด๋ธ์์ ์ด์ ์ถ์ถํ๊ธฐ ์ํด
- ํน์ ํ๊ฒ ์ธ๋ฑ์ค๋ ์ปฌ๋ผ์ ์ํ MIN(), MAX() ๊ฐ์ ์ฐพ๊ธฐ ์ํด
- ์ฌ์ฉํ ์ ์๋ ํค์ ์ต ์ข์ธก ์ ๋์ฌ(leftmost prefix)๋ฅผ ํตํด ์ ๋ ฌ ๋ฐ ๊ทธ๋ฃนํ๋ฅผ ์ํด
- ๋ฐ์ดํฐ ์ด์ ์ฐธ์กฐํ์ง ์๋ ์ํ๋ก, ๊ฐ์ ์ถ์ถํ๊ธฐ ์ํด ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํ ํ๋ ๊ฒฝ์ฐ
๐ ์ธ๋ฑ์ค Column ์ค์ ๊ธฐ์ค
- Cardinality(๊ธฐ์์ฑ)๊ฐ ๋์ ๊ฒ
- ๊ณ ์ ํ ๊ฐ์ ์๊ฐ ๋ง๋ค๋ ๊ฒ
- ์๋ ์์์์, ์ฃผ๋ฏผ๋ฒํธ์ ์นด๋๋๋ฆฌํฐ > ์ฑ๋ณ ์นด๋๋๋ฆฌํฐ
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ปฌ๋ผ์ ๊ฒฝ์ฐ, Index ๋ฅผ ํตํด ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง ํ ์ ์๊ธฐ ๋๋ฌธ
์นด๋๋๋ฆฌํฐ
์นด๋๋๋ฆฌํฐ ๊ฐ๋
- **์ ์ฒด ํ์ ๋ํ ํน์ ์ปฌ๋ผ์ ์ค๋ณต ์์น**๋ฅผ ๋ํ๋ด๋ ์งํ
- ์ค๋ณต๋๊ฐ ‘๋ฎ์ผ๋ฉด' → ์นด๋๋๋ฆฌ๊ฐ ‘๋๋ค’
- ์ค๋ณต๋๊ฐ ‘๋์ผ๋ฉด' → ์นด๋๋๋ฆฌํฐ๊ฐ **‘๋ฎ๋ค’**
์ ์ ์๋ ์นด๋๋๋ฆฌํฐ์ ์ ์ ์๋ ์นด๋๋๋ฆฌํฐ
- ์
์ ์๋ ์นด๋๋๋ฆฌํฐ
- ์ฑ๋ณ : ๋จ/์ฌ → ์นด๋๋๋ฆฌํฐ = 2
- ์์ผ : ์ ~ ์ผ → ์นด๋๋๋ฆฌํฐ = 7
- ์
์ ์๋ ์นด๋๋๋ฆฌํฐ
- ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ : ์ ๋ํฌํ ๊ฐ → ํ์ฌ ํ์ count ํ ๊ฐ
์๋์ ์ธ ๊ฐ๋ ์ ์นด๋๋๋ฆฌํฐ
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค/๋ฎ๋ค๋ ๋น๊ต ๋์์ด ์กด์ฌํ๊ณ , ๊ทธ ๋์์ ๋นํด ๋๋ค/๋ฎ๋ค๋ผ๊ณ ํํํ๋ฏ๋ก ์๋์ ์ธ ๊ฒ
- Ex) ์์ผ์ ์นด๋๋๋ฆฌํฐ = 7→ ์์ผ > ์ฑ๋ณ, ์์ผ < ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ
- ์ฑ๋ณ์ ์นด๋๋๋ฆฌํฐ = 2
- Distinct ํ ๊ฐ์ด ๋์ผ๋ฉด ์ค๋ณต๋๊ฐ ๋ฎ๋ค / ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค
๋ฉํฐ ์ธ๋ฑ์ฑ ์ ๋ต
- ์ธ๋ฑ์ค๋ฅผ ๊ฑธ ๋์๋, ์ต๋ํ ๋ง์ ๋ฐ์ดํฐ๊ฐ ๊ฑธ๋ฌ์ ธ์ผ full scan ์ ํผํ ์ ์๋ค.
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ปฌ๋ผ์ ์ฐ์ ์์์ ๋๋ ๊ฒ์ด ์ธ๋ฑ์ฑ ์ ๋ต์ ์ ๋ฆฌ
- Ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ → ์ฑ๋ณ ์์ผ๋ก ์ธ๋ฑ์ฑ
์ธ๋ฑ์ค ์ฅ์
- ํค ๊ฐ์ ํตํด ํ ์ด๋ธ์์ ๊ฒ์ ๋ฐ ์ ๋ ฌ ์๋ ํฅ์
- ๊ทธ๋ฃนํ ์์ ์๋ ํฅ์
- ์ธ๋ฑ์ค ์ฌ์ฉ ์ ํ ์ด๋ธ ํ์ ๊ณ ์ ์ฑ ๊ฐํ ๊ฐ๋ฅ
- ํ ์ด๋ธ์ ๊ธฐ๋ณธํค = ์๋์ผ๋ก ์ธ๋ฑ์ค๊ฐ ๋จ
์ธ๋ฑ์ค ๋จ์
- Index ์์ฑ ์ .mdb ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐ
- ํ ํ์ด์ง๋ฅผ ๋์์ ์์ ํ ์ ์๋ ๋ณํ์ฑ ์ ํ
- Index ๋ ํ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ฑฐ๋, ๋ ์ฝ๋ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ์ฑ๋ฅ์ ํ
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ, Index๋ฅผ ์ฌ์์ฑํด์ผ ํ๋ฏ๋ก, ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นจ
- Index ์์ฑ ์ ์๊ฐ ์์
- Index ๊ฐ DB ๊ณต๊ฐ์ ์ฐจ์ง → ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ(DB์ 10% ๋ด์ธ ์ถ๊ฐ ๊ณต๊ฐ)ํ์
์ฐธ๊ณ ์๋ฃ
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] HTTP ๋ ? (0) | 2022.07.09 |
---|---|
[Network] TCP ์ UDP ์ ์ฐจ์ด ? (0) | 2022.07.09 |
[Network] TCP/IP ๋ ? (0) | 2022.07.09 |
[Network] OSI 7๊ณ์ธต(feat.TCP/IP Updated) (0) | 2022.06.21 |
[OS] Process / Thread (0) | 2022.01.12 |