[DB] INDEX
์ธ๋ฑ์ค(Index)๋?
๋ฐ์ดํฐ์ INSERT, UPDATE, DELETE ์์
์ ํฌ์ํ๊ณ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ฑ
์ ์์ธ
์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ธ๋ฑ์ค์ ์ข ๋ฅ
- ํด๋ฌ์คํฐ ์ธ๋ฑ์ค(Clustered Index)
- ํ ์ด๋ธ๋น 1๊ฐ๋ง ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
- PK ์ค์ ์ ๊ทธ ์ปฌ๋ผ์ ์๋์ผ๋ก ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ก ์์ฑ๋๋ค.
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ ์ฌ๋ฐฐ์ดํ๋ค.
- ์ธ๋ฑ์ค ์์ฒด์ ๋ฆฌํ ํ์ด์ง๊ฐ ๊ณง ๋ฐ์ดํฐ์ด๋ค. (์ธ๋ฑ์ค ์์ฒด์ ๋ฐ์ดํฐ๊ฐ ํฌํจ)
- ๋ ผ ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ณด๋ค ๊ฒ์ ์๋๋ ๋น ๋ฅด๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์ ๋ ฅ, ์์ , ์ญ์ ๋ ๋๋ฆฌ๋ค.
- ๋ฐ์ดํฐ ์ ๋ ฅ, ์์ , ์ญ์ ์ ํญ์ ์ ๋ ฌ ์ํ๋ฅผ ์ ์งํ๋ค.
- ๋
ผ ํด๋ฌ์คํฐ ์ธ๋ฑ์ค(Non Clustered Index)
- ํ ์ด๋ธ๋น ์ฌ๋ฌ ๊ฐ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
- ๋ ์ฝ๋์ ์๋ณธ์ ์ ๋ ฌ๋์ง ์๊ณ , ์ธ๋ฑ์ค ํ์ด์ง๋ง ์ ๋ ฌ๋๋ค.
- ์ธ๋ฑ์ค ํ์ด์ง๋ ๋ก๊ทธํ์ผ์ ์ ์ฅ๋๋ค.
- ์ธ๋ฑ์ค ์์ฒด์ ๋ฆฌํ ํ์ด์ง๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ๋ฐ์ดํฐ๊ฐ ์์นํ ์ฃผ์์ ๊ณ ์ ๊ฐ์ด๋ค.
- ํด๋ฌ์คํฐํ๋ณด๋ค ๊ฒ์ ์๋๋ ๋๋ฆฌ์ง๋ง ๋ฐ์ดํฐ์ ์ ๋ ฅ, ์์ , ์ญ์ ๋ ๋ ๋น ๋ฅด๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ ํ์ด์ง๋ ๊ทธ๋ฅ ๋ ์ํ์์ ๋ณ๋์ ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ฉ๋์ ๋ ์ฐจ์งํ๋ค.
์ธ๋ฑ์ค์ ์ฅ์
- ๊ฒ์ ์๋๋ฅผ ๋์ฌ์ค๋ค.
- ์ ๋ฐ์ ์ธ ์์คํ ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
์ธ๋ฑ์ค์ ๋จ์
- ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด DB์ ์ฝ 10%์ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ด ์์ฃผ ์ผ์ด๋ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์์ฑํด์ผ ํ ํ์๊ฐ ์์ด ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น ์ ์๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์๋ชป ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋๋ ์ญํจ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๊ธฐ ์ข์ ์ปฌ๋ผ
- ์นด๋๋๋ฆฌํฐ(Cardinality)๊ฐ ๋์ ์ปฌ๋ผ
์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค๋ ๊ฒ์ ์ค๋ณต๋๊ฐ ๋ฎ๋ค๋ ์๋ฏธ์ด๋ค.(= ๋๋ถ๋ถ ๋ค๋ฅธ ๊ฐ๋ค์ ๊ฐ๊ณ ์๋ค.) - ์ ํ๋(Selectivity)๊ฐ ๋ฎ์ ์ปฌ๋ผ
์ ํ๋๊ฐ ๋ฎ๋ค๋ ๊ฒ์ ํ ์ปฌ๋ผ์ด ๊ฐ๊ณ ์๋ ๊ฐ ํ๋๋ก ์ ์ row๊ฐ ๊ฒ์๋๋ค๋ ์๋ฏธ์ด๋ค. - WHERE, JOIN, ORDER BY ์ ์ ๋ง์ด ํ์ฉ๋๋ ์ปฌ๋ผ
- ์ถ๊ฐ, ์์ , ์ญ์ ๋น๋๊ฐ ๋ฎ์ ์ปฌ๋ผ
์ธ๋ฑ์ค ์ฌ์ฉ์ ์ฃผ์์ฌํญ
- ๊ฒ์ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์ 15~20% ์ด์์ด๋ผ๋ฉด, MySQL์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
์ ์ฒด ๋ฐ์ดํฐ์ 10~15% ์ด๋ด์ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋ ๋ ํจ์จ์ ์ด๊ณ , ๊ทธ ์ด์์ด ๋ ๋๋ ์คํ๋ ค ํ์ค์บ์ด ๋ ๋น ๋ฅด๋ค. - ์ฌ์ฉํ์ง ์๋ ์ธ๋ฑ์ค๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๋ค.
์ธ๋ฑ์ค๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ถ์ ํ ๋น๊ตํ ๋
WHERE ์ปฌ๋ผ <> '0'
- LIKE ๊ฒ์์ %๊ฐ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์์ ์์นํ ๋
WHERE ์ปฌ๋ผ LIKE '%๋ฏผ์'
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๊ฐ๊ณตํ ๋
WHERE REPLACE(์ปฌ๋ผ, 'A', 'B') = 'BB'
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ ํ๋ณํ์ ํ ๋
WHERE ์ปฌ๋ผ(ex. ๋ฌธ์์ด ํ์ ) = 123
GROUP BY ์ ์ ์ธ๋ฑ์ค ์ ์์ฌํญ
- GROUP BY ์ ์ ๋ช ์๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์์์ ์์น๊ฐ ๊ฐ์์ผ ํ๋ค.
- WHERE ์ ๊ณผ๋ ๋ค๋ฅด๊ฒ GROUP BY ์ ์ ๋ช ์๋ ์ปฌ๋ผ์ด ํ๋๋ผ๋ ์ธ๋ฑ์ค์ ์์ผ๋ฉด GROUP BY ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ปฌ๋ผ ์ค์ ๋ค์ชฝ์ ์๋ ์ปฌ๋ผ์ GROUP BY ์ ์ ๋ช ์๋์ง ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์ธ๋ฑ์ค์ ์์ชฝ์ ์๋ ์ปฌ๋ผ์ด GROUP BY ์ ์ ๋ช ์๋์ง ์์ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ORDER BY ์ ์ ์ธ๋ฑ์ค ์ ์์ฌํญ
- ์ ๋ ฌ๋๋ ๊ฐ ์ปฌ๋ผ์ ์ค๋ฆ์ฐจ์ ๋ฐ ๋ด๋ฆผ์ฐจ์์ด ์ธ๋ฑ์ค์ ๊ฐ๊ฑฐ๋ ๋๋ ์ ๋ฐ๋์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์๋ค.
- ORDER BY ์ ์ ๋ชจ๋ ์ปฌ๋ผ์ด ์ค๋ฆ์ฐจ์์ด๊ฑฐ๋ ๋ด๋ฆผ์ฐจ์์ผ ๋๋ง ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
GROUP BY + ORDER BY ์ ์ ์ธ๋ฑ์ค ์ ์์ฌํญ
- GROUP BY ์ ์ ๋ช ์๋ ์ปฌ๋ผ๊ณผ ORDER BY์ ๋ช ์๋ ์ปฌ๋ผ์ด ์์์ ๋ด์ฉ์ด ๋ชจ๋ ๊ฐ์์ผ ํ๋ค.
ORDER BY DESC ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋์ง ์๋๋ค.(MySQL 8.0 ์ด์ ๊น์ง)
Leave a comment