Index์ ํ์์ฑ
RDBMS์์ ๊ฒ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ
Index๋ DB ๋ถ์ผ์ ์์ด์ ํ ์ด๋ธ์ ๋ํ ๋์์ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์๋ฃ ๊ตฌ์กฐ
์๋ฐ(music)
row id | ์ ๋ชฉ | ๊ฐ์ | ๋ฐ๋งค์ผ |
---|---|---|---|
1 | aaaaaa | a | 2022.03.04 |
2 | bbbbbb | e | 2021.03.03 |
3 | cccccc | b | |
… | |||
52222 | dddddd | b | 2021.03.03 |
52223 | eeeeee | a | 2021.03.03 |
52224 | ffffffff | b | 2021.03.03 |
… | |||
99999 | ggggggg | c | 2021.03.03 |
100000 | hhhhhhh | d | 2021.03.03 |
์ด๋ค ์ฌ๋์ด ๊ฐ์๊ฐ a์ธ ๋ชจ๋ ์๋ฐ์ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํ์!
SELECT * FROM music
WHERE ๊ฐ์ = 'a';
index๊ฐ ์๋ ๊ฒฝ์ฐ, 100000๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๋ ๋ชจ๋ ๋ค์ ธ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๋๋ค.
์ด ๋ฐฉ์์ Full Table Scan์ด๋ผ๊ณ ํ๋ค.
์ค์ ํ์ฌ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 10๋ง๊ฐ, 100๋ง๊ฐ๊ฐ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ full table scan ๋ฐฉ์์ ์ด์ฉํ๊ฒ ๋๋ค๋ฉด ์๋นํ ๋นํจ์จ์ ์ด๋ค.
index๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค๋ฉด, ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๋ฑ์ค ์ ๋ ฌ์ ํ๋ค.(Range Scan)
row id | ์ ๋ชฉ | ๊ฐ์ | ๋ฐ๋งค์ผ |
---|---|---|---|
1 | aaaaaa | a | 2022.03.04 |
52223 | eeeeee | a | 2021.03.03 |
3 | cccccc | b | |
52222 | dddddd | b | 2021.03.03 |
52224 | ffffffff | b | 2021.03.03 |
… | |||
… | |||
99999 | ggggggg | c | 2021.03.03 |
100000 | hhhhhhh | d | 2021.03.03 |
2 | bbbbbb | e | 2021.03.03 |
์ธ๋ฑ์ค๋ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ‘a’๋ฅผ ๊ณ์ ๊ฒ์ํ๋ค๊ฐ ๊ทธ๋ค์ ‘b’๋ฅผ ๋ง๋๋ ์๊ฐ, ๋์ด์ ‘a’๊ฐ์์ ์๋ฐ์ ์กด์ฌํ์ง ์๋๋ค๊ณ ์๊ฐํ๊ณ ํ์์ ์ข ๋ฃํ๋ค.
์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ์ด์ ๋ row id๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ํ ์ ์๋๋ก ์ ๋ํด์ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํจ์ด๋ค!
์ธ๋ฑ์ค์ ์ฅ๋จ์
- ์ฅ์
- ํ ์ด๋ธ์ ์กฐํํ๋ ์๋์ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ํฅ์ํ ์ ์๋ค.
- ์ ๋ฐ์ ์ธ ์์คํ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
- ๋จ์
- ์ธ๋ฑ์ค ๊ด๋ฆฌ๋ฅผ ์ํด DB์ ์ฝ 10%์ ํด๋นํ๋ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ๋ค.
- ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค → ์ธ๋ฑ์ค์ ๊ด๋ฆฌ๊ฐ ํ์
- ์์ (crud)๊ฐ ๋น๋ฒํ column์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ์ปค์ ธ์ ์ฑ๋ฅ์ด ์คํ๋ ค ์ ํ๋ ์ ์๋ค.
์ธ๋ฑ์ค์ ๊ด๋ฆฌ
DBMS์์๋ index๊ฐ ํญ์ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์๋๋ก ๊ด๋ฆฌํ๋ค.
INSERT
: ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ
DELETE
: ๋์ด์ ํด๋น ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์์
UPDATE
: ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฒ๋ฆฌ, ๊ฐฑ์ ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค ์ถ๊ฐ
→ ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋ column์ ํด๋น ์์ ์ด ์ํ๋๋ค๋ฉด, ๋งค๋ฒ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ถ๊ฐ์ ์ผ๋ก ์งํํด์ค์ผํ๋ค. ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค!
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
- ๊ท๋ชจ๊ฐ ์์ง ์์ ํ ์ด๋ธ
- INSERT, DELETE, UPDATE๊ฐ ์์ฃผ ๋ฐ์ํ์ง ์๋ column
- JOIN, WHERE, ORDER BY์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ
- ๋ฐ์ดํฐ์ ์ค๋ณต๋๊ฐ ๋ฎ์ ์ปฌ๋ผ
Index์ ์๋ฃ๊ตฌ์กฐ
- B-tree
- ์์ ๋ ธ๋๊ฐ ์ต์ ๋๊ฐ ์ด์์ด๋ค
- Root Node, Branch Node, Leaf Node๋ก ๊ตฌ์ฑ๋๋ค
- ํน์ฑ
- leaf node๋ง ์ธ๋ฑ์ค์ ํจ๊ป ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋๋จธ์ง ์ธ๋ฑ์ค ๋ ธ๋๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค(key)๋ง ๊ฐ๋๋ค.
- leaf node๋ค์ LinkedList๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- Root Node์์ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ํ ๊ทธ์ ๋ง๋ ๋ ธ๋๋ก ์ด๋ํ์ฌ ์ต์ข ์ ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ Leaf Node์ ๋์ฐฉํ๋ค.
- ์ธ๋ฑ์ค์ ์ดํ๋ฐฉ์- ์์ง์ ์ผ๋ก ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋ค์ด๊ฐ ํ leaf node์์ ์ํ์ ์ผ๋ก ์กฐ๊ฑด์ ๋ง์กฑํ๋ node๋ฅผ ์ฐพ๋๋ค.