Index
์นผ๋ผ์ ๊ฐ๊ณผ ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ํค์ ๊ฐ์ ์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด๋๋ค.
* DBMS์ ์ธ๋ฑ์ค๋ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์
์ํ๋ ๊ฐ์ ํ์ํ๋ ๊ฒ์ ๋น ๋ฅด์ง๋ง ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ , ์์ ํ๋ ๊ฒฝ์ฐ์๋ query๋ฌธ ์คํ ์๋๊ฐ ๋๋ ค์ง๋ค.
DBMS์์ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์ฑ๋ฅ์ ํฌ์ํ๋ ๋์ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฅ์ด๋ค.
Index ์๋ฃ๊ตฌ์กฐ - DBMS์ ์ธ๋ฑ์ค ๊ด๋ฆฌ
B+- Tree Index ์๊ณ ๋ฆฌ์ฆ
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
B +- ์ธ๋ฑ์ค๋ ์นผ๋ผ์ ๊ฐ์ ๋ณํํ์ง ์๊ณ (์ฌ์ค์๊ฐ์ ์๋ถ๋ถ๋ง ์๋ผ์ ๊ด๋ฆฌํ๋ค๊ณ ํ๋ค),
์๋์ ๊ฐ์ ์ด์ฉํด ์ธ๋ฑ์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
Hash ์ธ๋ฑ์ค ์๊ณ ๋ฆฌ์ฆ
์นผ๋ผ์ ๊ฐ์ผ๋ก ํด์ ๊ฐ์ ๊ณ์ฐํด์ ์ธ๋ฑ์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์์ ์ง์ํ๋ค.
ํ์ง๋ง ๊ฐ์ ๋ณํํด์ ์ธ๋ฑ์ฑํ๋ฏ๋ก, ํน์ ๋ฌธ์๋ก ์์ํ๋ ๊ฐ์ผ๋ก ๊ฒ์์ ํ๋ ์ ๋ฐฉ ์ผ์น์ ๊ฐ์ด ๊ฐ์ ์ผ๋ถ๋ง์ผ๋ก ๊ฒ์ํ๊ณ ์ ํ ๋๋ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฃผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ง์ด ์ฌ์ฉํ๋ค.
์ index ๋ฅผ ์์ฑํ๋๋ฐ b-tree ๋ฅผ ์ฌ์ฉํ๋๊ฐ?
๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ธ hash table ์ด ๋ ํจ์จ์ ์ผ ๊ฒ ๊ฐ์๋ฐ?
SELECT ์ง์์ ์กฐ๊ฑด์๋ ๋ถ๋ฑํธ(<>) ์ฐ์ฐ๋ ํฌํจ์ด ๋๋ค.
hash table ์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ฑํธ(=) ์ฐ์ฐ์ด ์๋ ๋ถ๋ฑํธ ์ฐ์ฐ์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋๋ฑ ์ฐ์ฐ(=)์ ํนํ๋ hashtable์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฃ๊ตฌ์กฐ๋ก ์ ํฉํ์ง ์๋ค.
Primary Index vs Secondary Index
ํด๋ฌ์คํฐ(Cluster)๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ํ๋๋ก ๋ฌถ๋๋ค๋ ์๋ฏธ๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋๋ฐ, ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค. ์ธ๋ฑ์ค์์ ํด๋ฌ์คํฐ๋๋ ๋น์ทํ ๊ฒ๋ค์ ๋ฌถ์ด์ ์ ์ฅํ๋ ํํ๋ก ๊ตฌํ๋๋๋ฐ, ์ด๋ ์ฃผ๋ก ๋น์ทํ ๊ฐ๋ค์ ๋์์ ์กฐํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ์ ์์ ์ฐฉ์๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋น์ทํ ๊ฐ๋ค์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํ ์ฅ์์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ค์ ๋งํ๋ค.
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ๋ํด์๋ง ์ ์ฉ๋๋ ๋ด์ฉ์ด๋ค. ์ฆ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ด ๋น์ทํ ๋ ์ฝ๋๋ผ๋ฆฌ ๋ฌถ์ด์ ์ ์ฅํ๋ ๊ฒ์ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ผ๊ณ ํํํ๋ค. ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค์์๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ ์ํด ๋ ์ฝ๋์ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋๋ฉฐ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น ๋ํ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ์ ์คํ๊ฒ ๊ฒฐ์ ํ๊ณ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ๋น ํ ๊ฐ๋ง ์์ฑํ ์ ์๋ค. ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ๋ํด์๋ง ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค, ์ด์ ๋ฐํด non ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ๋น ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ ์ ์๋ค.
Composite Index
์ธ๋ฑ์ค๋ก ์ค์ ํ๋ ํ๋์ ์์ฑ์ด ์ค์ํ๋ค. title, author ์ด ์์๋ก ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ค๋ฉด title ์ search ํ๋ ๊ฒฝ์ฐ, index ๋ฅผ ์์ฑํ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์ง๋ง, author ๋ง์ผ๋ก search ํ๋ ๊ฒฝ์ฐ, index ๋ฅผ ์์ฑํ ๊ฒ์ด ์์ฉ์ด ์์ด์ง๋ค. ๋ฐ๋ผ์ SELECT ์ง์๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ด๋ป๊ฒ ์์ฑํ ๊ฒ์ธ๊ฐ์ ๋ํด ๋ง์ ์ํฅ์ ๋ผ์น๊ฒ ๋๋ค.
Index์ ์ฑ๋ฅ๊ณผ ๊ณ ๋ คํด์ผํ ์ฌํญ
SELECT ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ์๋ฑํ ํฅ์์ํค๋ INDEX ํญ์ ์ข์๊น? ์๋๋ค.
- INDEX ๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด INSERT, DELETE, UPDATE ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ ๋ ๋ณ๋์ ๊ณผ์ ์ด ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์
INSERT ์ ๊ฒฝ์ฐ INDEX ์ ๋ํ ๋ฐ์ดํฐ๋ ์ถ๊ฐํด์ผ ํ๋ฏ๋ก ๊ทธ๋งํผ ์ฑ๋ฅ์ ์์ค์ด ๋ฐ๋ฅธ๋ค.
DELETE ์ ๊ฒฝ์ฐ INDEX ์ ์กด์ฌํ๋ ๊ฐ์ ์ญ์ ํ์ง ์๊ณ ์ฌ์ฉ ์ํ๋ค๋ ํ์๋ก ๋จ๊ฒ ๋๋ค.
์ฆ row ์ ์๋ ๊ทธ๋๋ก์ธ ๊ฒ์ด๋ค. ์ด ์์ ์ด ๋ฐ๋ณต๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ค์ ๋ฐ์ดํฐ๋ 10 ๋ง๊ฑด์ธ๋ฐ ๋ฐ์ดํฐ๊ฐ 100 ๋ง๊ฑด ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์๋ ์๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค๋ ๋ ์ด์ ์ ์ญํ ์ ๋ชปํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
UPDATE ์ ๊ฒฝ์ฐ๋ INSERT ์ ๊ฒฝ์ฐ, DELETE ์ ๊ฒฝ์ฐ์ ๋ฌธ์ ์ ์ ๋์์ ์๋ฐํ๋ค.
์ด์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ณ ๊ทธ ์๋ฆฌ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ ๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ๋ ์ญ์ ๋์ง ์๊ณ insert ๋ก ์ธํ split ๋ ๋ฐ์ํ๊ฒ ๋๋ค.
- ์ปฌ๋ผ์ ์ด๋ฃจ๊ณ ์๋ ๋ฐ์ดํฐ์ ํ์์ ๋ฐ๋ผ์ ์ธ๋ฑ์ค์ ์ฑ๋ฅ์ด ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์ฆ, ๋ฐ์ดํฐ์ ํ์์ ๋ฐ๋ผ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด ํจ์จ์ ์ด๊ณ ๋ง๋ค๋ฉด ๋นํจ์จ์ ์ธ ๋ฐ์ดํฐ์ ํ์์ด ์กด์ฌํ๋ค.
์ด๋ฆ, ๋์ด, ์ฑ๋ณ ์ธ ๊ฐ์ง์ ํ๋๋ฅผ ๊ฐ๊ณ ์๋ ํ ์ด๋ธ์ ์๊ฐํด๋ณด์.
์ด๋ฆ์ ์จ๊ฐ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ ๊ฒ์ด๋ฉฐ ๋์ด๋ INT ํ์ ์ ๊ฐ์ ๊ฒ์ด๊ณ , ์ฑ๋ณ์ ๋จ, ๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด์๋ง ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๊ฒ์์ ์ฝ๊ฒ ์์ธกํ ์ ์๋ค.
์ด ๊ฒฝ์ฐ ์ด๋ค ์ปฌ๋ผ์ ๋ํด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์จ์ ์ผ๊น? ์ด๋ฆ์ ๋ํด์๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ํจ์จ์ ์ด๋ค.
*์ ์ฑ๋ณ์ด๋ ๋์ด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๋นํจ์จ์ ์ผ๊น?
10000 ๋ ์ฝ๋์ ํด๋นํ๋ ํ ์ด๋ธ์ ๋ํด์ 2000 ๋จ์๋ก ์ฑ๋ณ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ์. ๊ฐ์ range ๊ฐ ์ ์ ์ฑ๋ณ์ ์ธ๋ฑ์ค๋ฅผ ์ฝ๊ณ ๋ค์ ํ ๋ฒ ๋์คํฌ I/O ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋งํผ ๋นํจ์จ์ ์ธ ๊ฒ์ด๋ค.
< ์ฐธ๊ณ >
'๐ฅ > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] SQL Injection (0) | 2021.10.13 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] NoSQL (0) | 2021.09.09 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํธ๋์ญ์ Transaction ์ด๋ (0) | 2021.08.25 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ ๊ทํ์ ๋ํด์ (0) | 2021.08.18 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฑ๋ฅ (0) | 2021.08.04 |