Index
์ธ๋ฑ์ค(Index)๋?
๋งค์ฐ ๋งค์ฐ ๋๊บผ์ด ์ฑ ์ ๋ชฉ์ฐจ ํ์ด์ง๊ฐ ์๋ค๋ฉด ์ด๋จ๊น์?
์ฑ ์์ ๋ด์ฉ์ ์ฐพ์ ๋ ์ฌ๋ฌ๋ถ์ ์ด๋๋ฅผ ์ดํด๋ณด์๋์?
์ฐ๋ฆฌ๋ค์ ํญ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ์ ๋ ์ฃผ์, ๋ชฉ์ฐจ๋ฅผ ๋ณด๊ณ ์ฐพ์ต๋๋ค.
DB Index๋ ๋๊ฐ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๋งค์ฐ ์ค์ํ ๊ธฐ์ ์ ๋๋ค.
๊ทธ๋ฐ ๋ง์ ๋ฐ์ดํฐ ์์์ ์ฐพ๊ณ ์ถ์ ๋ด์ฉ์ ์ด๋ป๊ฒ ์ฐพ์๊น์?
๊ทธ๊ฒ์ ๋์์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก DB Index ์ ๋๋ค.
์ธ๋ฑ์ค ์ข ๋ฅ
์ธ๋ฑ์ค ์ข ๋ฅ๋ก ํฌ๊ฒ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค์ ๋ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ก ๋๋ ์ ์์ต๋๋ค.
DB๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฝ์ด์ต๋๋ค.
์ํ์ ์์ธ์ค
- ํ ์ด๋ธ ํ์ค์บ์ด ์ํ์ ์์ธ์ค๋ฅผ ์ฌ์ฉํจ
- Multi Block I/O ๋ฐฉ์์ผ๋ก ํจ์จ์ ์ด๊ฒ ๋์คํฌ๋ฅผ ์ฝ์ด์ด
๋๋ค ์์ธ์ค
- Index range scan์ด ๋๋ค ์์ธ์ค๋ฅผ ์ฌ์ฉํจ
- Single Block I/O ๋ฐฉ์์ผ๋ก ๋ ์ฝ๋ ํ๋๋ฅผ ์ฝ๊ธฐ ์ํด ๋งค๋ฒ I/O๊ฐ ๋ฐ์ํจ
- ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์ผ์ ๋์ ๋๊ฒ๋๋ฉด ์ธ๋ฑ์ค ์ค์บ๋ณด๋ค ํ์ค์บ์ด ์ ๋ฆฌํจ
- ์ธ๋ฑ์ค๋ ํฐ ํ ์ด๋ธ์์ ์๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋ ์ ๋ฆฌ
- ๋๋ค I/O๋ฅผ ์ด๋ป๊ฒ ์ค์ด๋์ง๊ฐ ์ค์
- ์ค์บ ๋ฒ์๋ฅผ ์ค์ฌ์ผํจ
์ธ๋ฑ์ค์ ํ์ ๊ณผ์
์ธ๋ฑ์ค๋ ์์ง์ ํ์๊ณผ ์ํ์ ํ์์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
์์ง์ ํ์
์ํ์ ํ์
- ์ํ์ ํ์ ์ค ๋ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ผ๋ฉด ๋๋ค ์ก์ธ์ค, ์ฆ ์ฑ๊ธ I/O๊ฐ ๋ฐ์ํจ
- ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค์ธ PK๋ mysql๊ธฐ์ค์ผ๋ก ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ์ ์ํ์ ์์ธ์ค๊ฐ ๋ฐ์ํจ
- ์ด ๋ถ๋ถ์ ์ ํ๋ํด์ผ ์ฑ๋ฅ์ด ์์นํจ
์ธ๋ฑ์ค๋ฅผ ํ๋ํด๋ณด์
์ธ๋ฑ์ค๋ฅผ ๊ฐ์ฅ ์ฝ๊ฒ ํ๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ mysql ์ํฌ๋ฒค์น๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
์ํฌ๋ฒค์น์์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ํ ์คํ๊ณํ ๋ฒํผ์ ๋๋ฌ ์ด ์ฟผ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋์ํ ์ง์ ๋ํด ๊ทธ๋ฆผ์ผ๋ก ํํํด์ฃผ๋ ๊ธฐ๋ฅ์ ํตํด ํ๋์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๋ฌธ ์์ Explain
์ด๋ผ๋ ๋ช
๋ น์ด๋ฅผ ํตํด ์ธ๋ถ์ ์ธ ๋ด์ฉ๋ ์์๋ณผ ์ ์์ต๋๋ค.
Explain
์ ํตํด ๋์ค๋ ์ธ๋ถ์ ์ธ ๋ด์ฉ ์ค ์ฐ๋ฆฌ๊ฐ ์ดํด๋ด์ผ ํ ์ปฌ๋ผ์ 7๊ฐ ์
๋๋ค.
์คํ๊ณํ ์ดํด๋ณด๊ธฐ
- id
- SQL ๋ฌธ์ด ์ํ๋๋ ์์
- ์์ ์์์ id๊ฐ ๋ชจ๋๋ค 1์ด์ง๋ง 2์ธ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด 1โ2 ์์๋ก ์คํ๋๋ค๊ณ ๋ณด๋ฉด ๋จ
- id๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์กฐ์ธ์ ์๋ฏธํจ
- select_type
- SIMPLE โ ๋จ์ํ SELECT ๋ฌธ
- PRIMARY โ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ธ๋ ์ธ๋ถ ์ฟผ๋ฆฌ, UNION์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ SELECT ๋ฌธ
- SUBQUERY โ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋๋ ์๋ธ ์ฟผ๋ฆฌ (SELECT, WHERE ์ ์ ์ถ๊ฐ๋ ์๋ธ์ฟผ๋ฆฌ)
- DERIVED โ FROM ์ ์ ์์ฑ๋ ์๋ธ์ฟผ๋ฆฌ
- UNION โ UNION, UNION ALL๋ก ํฉ์ณ์ง SELECT
- DEPENDENT SUBQUERY โ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฐ๊นฅ์ชฝ SELECT ์ฟผ๋ฆฌ์ ์ ์๋ ์ปฌ๋ผ์ ์ฌ์ฉ
- DEPENDENT UNION โ ์ธ๋ถ์ ์ ์๋ ์ปฌ๋ผ์ UNION์ผ๋ก ๊ฒฐํฉ๋ ์ฟผ๋ฆฌ์์ ์ฌ์ฉ
- DEPENDENT ํ์ ์ ๋๋ถ๋ถ ํ๋ํด์ผํจ (์ฑ๋ฅ์ ํ)
- type
- ALL โ ํ ์ด๋ธ ํ์ค์บ
- range โ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
- index โ ์ธ๋ฑ์ค ํ์ค์บ
- eq_ref โ ์กฐ์ธ์ด ์ํ๋ ๋ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ PK ํน์ ๊ณ ์ ์ธ๋ฑ์ค๋ก ๋จ 1๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋
- ref โ eq_ref์ ๊ฐ์ผ๋ ๋ฐ์ดํฐ๊ฐ 2๊ฑด ์ด์์ผ ๊ฒฝ์ฐ
- const โ ์กฐํ๋๋ ๋ฐ์ดํฐ๊ฐ ๋จ 1๊ฑด ์ผ ๋
- system โ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๊ฑฐ๋ ํ ๊ฐ๋ง ์๋ ๊ฒฝ์ฐ
- key
- ์ตํฐ๋ง์ด์ ๊ฐ ์ค์ ๋ก ์ ํํ ์ธ๋ฑ์ค
- rows
- SQL๋ฌธ์ ์ํํ๊ธฐ ์ํด ์ ๊ทผํ๋ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ ์
- filtered
- ํํฐ๋ง ๋๊ณ ๋จ์ ๋ ์ฝ๋ ๋น์จ
- ์คํ ๋ฆฌ์ง ์์ง์ด ์ฝ์ด๋ค์ธ ๋ฐ์ดํฐ ์ค MySQL ์์ง์ด ํํฐ๋งํ๊ณ ๋จ์ ๋น์จ์ ์๋ฏธ
- ์ฆ, ๋์ ์๋ก ๋์คํฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ๋ค๋ ์๋ฏธ
- extra
- Distinct โ ์ค๋ณต ์ ๊ฑฐ์
- Using where โ WHERE ์ ๋ก ํํฐ์
- Using temporary โ ๋ฐ์ดํฐ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์ ์์ ํ ์ด๋ธ์ ์์ฑ, ๋ณดํต DISTINCT, GROUP BY, ORDER BY ๊ตฌ๋ฌธ์ด ํฌํจ๋ ๊ฒฝ์ฐ ์์ํ ์ด๋ธ์ ์์ฑ
- Using index โ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ํ์ผ์ ์ฝ์ง ์๊ณ ์ธ๋ฑ์ค๋ง ์ฝ์ด์ ์ฒ๋ฆฌ, ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ผ๊ณ ํจ
- Using filesort โ ์ ๋ ฌ์
๊ทธ๋์ ์ด๋ป๊ฒ ํ๋๊ฒ ์ข์ ํ๋์ธ๊ฐ์?
์ ๋ฆฌ
๊ฐ๋จํ๊ฒ ์ธ๋ฑ์ค์ ์ ์, ์ข ๋ฅ, ํ์๊ณผ์ , ํ๋๊น์ง ์์๋ณด์์ต๋๋ค.
์ธ๋ถ์ ์ธ ๋ด์ฉ๊ณผ ๊ตฌํ ๋ฐ ์ค์ต๊น์ง ์งํํ๊ธฐ์ ๋ถ๋์ด ๋๋ฌด ๋ง์ ๊ฒ ๊ฐ์ ํต์ฌ์ ์ธ ๋ด์ฉ๋ง ์ถ๋ ค ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
๋ฐฑ๋ฌธ์ด๋ถ์ฌ์ผํ
์ง์ SQL์ ์์ฑํ์ฌ DB์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค ๋บ๋คํ์ฌ ํ
์คํธํด๋ณด์๋ฉด ๋์ฑ๋ ์ฝ๊ฒ ์ดํด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ผญ! ์ํฌ๋ฒค์น์ ์คํ๊ณํ์ ์ฌ์ฉํด๋ณด์ธ์!
๊ทธ๋ผ ์ด๋ง ๋!
Reference
- ์ฐ์ํ ํ ํฌ์บ ํ Pro - ์์ ์ ์ธ ์๋น์ค ๋ง๋ค๊ธฐ
Uploaded by N2T