๐ซง DB ์ธ๋ฑ์ค๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
→ ์ฑ ์์ ๋ชฉ์ฐจ๋ฅผ ๋ณด๋ฉด ํ์ด์ง ๋ฒํธ๋ง์ผ๋ก ์ํ๋ ๋ด์ฉ์ ๋ถ๋ถ์ ํ ๋ฒ์ ์ฐพ์ ์ ์๋ ๊ฒ์ฒ๋ผ ๊ฒ์์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์๋ฏธ์ด๋ค
๐ Full Table Scan
full table scan์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํ ๋ where๋ฌธ์ ์ด์ฉํด์ ํ ์ด๋ธ์ ์ ์ฒด๋ฅผ ์กฐ๊ฑด๊ณผ ๋น๊ตํด์ผ๋๋ ์์ ์ด๋ค.
๊ทธ๋์ ๊ต์ฅํ ๋ฒ๊ฑฐ๋กญ๊ณ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆผ!
โ๏ธ B-Tree
B-Tree๋ Balanced Tree์ ์ค์๋ง์ด๋ค.
MySQL์ DB ์์ง์ธ InnoDB๋ B+Tree๋ก ์ด๋ฃจ์ด์ ธ์์ผ๋ฉฐ ์ด๊ฒ์ B-Tree์ ํ์ฅ๋ ๊ฐ๋ ์ด๋ค.
B-Tree
B-Tree๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ง๋์ด ์๋ค๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
์ฐจ๋ก๋๋ก ๋ฃจํธ๋ ธ๋, ๋ธ๋์น ๋ ธ๋, ๋ฆฌํ๋ ธ๋๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
- B-Tree๋ ํ ๋ ธ๋ ๋น ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ด ๊ฐ๋ฅํ๋ค.
- key๊ฐ์ ์ด์ฉํด ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ์ฐพ๋๋ค.
- ๊ท ํ์กํ ํธ๋ฆฌ์ด๋ค.
- ์ ๋ ฌ์ ์ฌ์ฉํ๋ค.
ํญ์ ๊ท ํ์กํ ํธ๋ฆฌ ๋ชจ์์ ์ ์งํ๊ณ , ์ ๋ ฌ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ฐ์ด ๋ค์ด์์ ๊ฒฝ์ฐ ์ ๋ ฌ ์ํ์ ๊ท ํ์ ์ ์งํ๊ธฐ ์ํด์ ํธ๋ฆฌ์ ๋ชจ์์ ๋ฐ๊ฟ์ผ ํ๋ค.
๐ ๋ฐ๋ผ์ ์ฐ๊ธฐ ์ฑ๋ฅ์ ์ค์ด๋ค๊ณ ๊ฒ์ ์ฑ๋ฅ์ ๋งค์ฐ ์ฌ๋ผ๊ฐ๋ค!!
B+Tree
B+Tree๋ B-Tree์ ํ์ฅ ๊ฐ๋ ์ผ๋ก B-Tree์ ๊ฒฝ์ฐ์๋ ๋ธ๋์น ๋ ธ๋์ key์ data๋ฅผ ๋ชจ๋ ๋ด์ ์ ์๋ค๋ฉด B+Tree์๋ ๋ธ๋์น๋ ธ๋์ key๋ง ๋ด์๋๊ณ ๋ฆฌํ๋ ธ๋์๋ง key์ data๋ฅผ ์ ์ฅํ๋ค.
์ฌ๊ธฐ์ ๋ฆฌํ๋ ธ๋๋ผ๋ฆฌ๋ linked list๋ก ์ฐ๊ฒฐ๋์ด์๋ค.
์ฅ์
- ๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํจ์ผ๋ก์จ ๋ ๋ง์ key๋ฅผ ์์ฉํ ์ ์๋ค.
- ํ๋์ ๋ ธ๋์ ์ฌ๋ฌ key๋ฅผ ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ์ ๋์ด๋ ๋ ๋ฎ์์ง๋ค → cache hit๋ฅผ ๋์ผ ์ ์์ (cache hit๋ CPU๊ฐ ์ฐธ์กฐํ๊ณ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์บ์์ ์กด์ฌํ๊ณ ์์ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.)
- B+Tree์ ๊ฒฝ์ฐ์๋ ๋ฆฌํ๋ ธ๋์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์ ํํ์๋ง ํ๋ฉด ๋ผ์ B-Tree๋ณด๋ค ๋น ๋ฅด๋ค.
โ๏ธ์ธ๋ฑ์ค ๊ตฌ์กฐ
์ธ๋ฑ์ค๋ ๋ฌผ๋ฆฌ์ /๋ ผ๋ฆฌ์ ์ผ๋ก ํ ์ด๋ธํ๊ณ ๋ ๋ฆฝ์ ์ด๋ค.
ํ ์ด๋ธ์ ์ปฌ๋ผ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ง ์๊ณ ์ ๋ ฅ๋ ์์๋๋ก ๋ค์ด๊ฐ์ง๋ง ์ธ๋ฑ์ค๋ key์ปฌ๋ผ(์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ผ๊ณ ์ง์ ํ ์ปฌ๋ผ์ ๊ฐ)๊ณผ rowid์ปฌ๋ผ ๋ ๊ฐ๋ก ์ด๋ฃจ์ด์ ธ์์ผ๋ฉฐ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
MySQL์์ ํ ์ด๋ธ ์์ฑํ ๋ ์๋์ ์ธ๊ฐ ํ์ผ์ด ์์ฑ๋๋ค.
- FRM : ํ ์ด๋ธ ๊ตฌ์กฐ ์ ์ฅ ํ์ผ
- MYD : ์ค์ ๋ฐ์ดํฐ ํ์ผ
- MYI : ์ธ๋ฑ์ค ์ ๋ณด ํ์ผ (์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๋ ์์ฑ๋๋ค)
→ MYI ๋์คํฌ ๊ณต๊ฐ์ ์ค์ ํ
์ด๋ธ์ ์ ์ฅํ ๋ ์ฌ์ฉ๋๋ ๋์คํฌ ๊ณต๊ฐ๋ณด๋ค ์์๋ฐ ๋ณดํต ์ธ๋ฑ์ค๋ ํ
์ด๋ธ์ ์ธ๋ถํญ๋ณต์ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
โ๏ธ์๋ ์๋ฆฌ
SELECT * FRO EMP WHERE empno = 7902;
- ์๋ฒ ํ๋ก์ธ์ค๊ฐ ํ์ฑ ๊ณผ์ ์ ๋ง์น ํ DB ๋ฒํผ ์บ์์ empno๊ฐ 7902 ์ ๋ณด๊ฐ ์๋์ง ํ์ธํ๋ค.
- ์ ๋ณด๊ฐ ์์ผ๋ฉด ํ๋ ๋์คํฌ ํ์ผ์์ 7902์ ๋ณด๋ฅผ ๊ฐ์ง ๋ธ๋ก์ ๋ณต์ฌํด์ DB ๋ฒํผ ์บ์๋ก ๊ฐ์ ธ์จ ํ 7900์ ๋ณด๋ง ๊ณจ๋ผ๋ด์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
์ด๋, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ WHERE์ ์ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค๊ฐ ๋ง๋ค์ด์ ธ์๋์ง ํ์ธ ํ ์ธ๋ฑ์ค์ ๋จผ์ ๊ฐ์ 7902์ ๋ณด๊ฐ ์ด๋ค rowid๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธ ํ rowid์ ์๋ ๋ธ๋ก๋ง ์ฐพ์๊ฐ์ DB๋ฒํผ ์บ์์ ๋ณต์ฌํ๋ค.
์์ผ๋ฉด, ๋ค ๋ณต์ฌํ ํ ํ๋ํ๋ ์ฐพ์
โ๏ธ ์ธ๋ฑ์ค ๋ฐฉ์
Clustered Index
์ฑ ์ผ๋ก ๋น์ ํ์๋ฉด ํ์ด์ง๋ฅผ ์๊ณ ์์ด์ ๋ฐ๋ก ํด๋น ํ์ด์ง๋ฅผ ํผ์น๋ ๊ฒ๊ณผ ๊ฐ์
→ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ์ปฌ๋ผ์ ๋ํด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐฐ์ดํ๋ค.
ํค ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ด์ง ๋ฒํธ๋ก ๊ตฌ๋ถํ๊ณ , ๊ฒ์ํ๊ณ ์ํ๋ ๋ฐ์ดํฐ์ ํค ๊ฐ์ผ๋ก ํ์ด์ง ๋ฒํธ๋ฅผ ๊ฒ์ํด์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
- ํ ์ด๋ธ์์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ๊ฐ์ฅ ํจ์จ์ ์ผ ๊ฒ ๊ฐ์ ์นผ๋ผ์ cluster index๋ก ์ง์ ํ๋ค.
Non-Clustered Index
์ฑ ์ผ๋ก ๋น์ ํ์๋ฉด ๋ชฉ์ฐจ์์ ์ฐพ๊ณ ์ํ๋ ๋ด์ฉ์ ํ์ด์ง๋ฅผ ์ฐพ๊ณ ๋์ ํด๋น ํ์ด์ง๋ก ์ด๋ํ๋ ๊ฒ
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ดํ์ง ์์ ์ํ๋ก ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ๊ตฌ์ฑ๋๋ค.
- ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๊ฑด๋ค์ด์ง ์๊ณ ๋ณ๋์ ์ฅ์์ ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ์์ฑํ๋ค.
- ์ฌ๊ธฐ์ ๊ตฌ๋ถ ๊ธฐ์ค์ ๋ค๋ฅด๊ฒ ๋ฐ๊พธ๋๋ผ๋ ๋ฐ์ดํฐํ์ด์ง๋ ์์ง์ด์ง ์๊ณ ๊ทธ๋๋ก ์กด์ฌํ๊ฒ ๋จ
์ธ๋ฑ์ค๋ฅผ ์ด๋์ ํ์ฉํ๋ฉด ์ข์๊น?
- where, join ์กฐ๊ฑด์ ์์ฃผ ๋ฐ์ํ๋ ์นผ๋ผ
- insert, update, delete์ด ์ ๊ฒ ๋ฐ์ํ๋ ์ปฌ๋ผ
- ์ค๋ณต๋๊ฐ ๋ฎ์ ์ปฌ๋ผ
- ๋ฒ์ ๊ฒ์์ด ์ ์ ์ปฌ๋ผ
- ๋ฐ์ดํฐ๊ฐ ๋ง์ ํ ์ด๋ธ
'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ๊ต์ฐฉ์ํ(Dead Lock)๋? (0) | 2024.01.18 |
---|---|
DB ์ ๊ทํ๋? (0) | 2024.01.14 |
[DB] Transaction(ํธ๋์ญ์ )์ด๋? (0) | 2023.10.30 |
ํ ์ด๋ธ ์ด๋ฆ์ ๋จ์ํ์ผ๋ก ํด์ผ๋ ๊น ๋ณต์ํ์ผ๋ก ํด์ผ๋ ๊น? ๐ค (2) | 2023.10.17 |