[Database] ์ธ๋ฑ์ค(Index)๋?
DBMS๋ Database์์ ํ์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํด์ค๋ค. ๊ทธ๋ ๋ค๋ฉด Database์๋ ์ค์ ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์ ์ฅ๋๋ ๊ฑธ๊น?
Database์ ๋ฌผ๋ฆฌ์ ์ ์ฅ
์๋์์ ์์ฑํ ๋ฌธ์๋ ํ์ผ์ ํํ๋ก ์ ์ฅ๋๋ฏ์ด, DBMS๋ ๋ง์ฐฌ๊ฐ์ง๋ก DBMS๋ง์ ๊ณ ์ ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค.
MySQL์ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ MySQL Workbench์ ๊ฐ์ SQL ์์ ๋๊ตฌ Tool์ ํตํด SQL๋ฌธ์ ์์ฑํด์ ์คํํ๋ฉด, DBMS๋ก ์์ฒญ์ด ๊ฐ๋ค. DBMS๋ ์ด์์ฒด์ ์์ ์คํ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด๊ธฐ ๋๋ฌธ์, ์ ์ฅ ์์ ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์์ฒด์ ๋ฅผ ํตํด ๊ฐ ์ฅ์น์ ๋ช ๋ น์ด ๋ด๋ ค์ ธ์ ๋ฐ์ดํฐ๋ฅผ ์ด์์ฒด์ ์ ํ์ผ ์์คํ ์ ์ข ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ๋ก ์ ์ฅ์ด ๋๋ค.
์ด๋, ์ค์ ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ์ ๋ณด์กฐ๊ธฐ์ต ์ฅ์น์ด๋ค. ๋ณด์กฐ๊ธฐ์ต์ฅ์น๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ ์ ์๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ณณ์ ํ๋๋์คํฌ์ด๋ค.
ํ๋๋์คํฌ๋ ์ํ ํ๋ ์ดํธ๋ก ๊ตฌ์ฑ๋์ด์, ํธ๋๊ณผ ์นํฐ๋ก ๋๋์ด์ ธ ์๋ค. ๋๋ฒ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Arm์ด ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ์ ์ฅ๋ ๊ฐ์ ์ฝ์ด์ค๊ฑฐ๋ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค. ๋ฐ๋ผ์ ํ๋๋์คํฌ์ ์ฑ๋ฅ์ Arm์ด ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ๋์คํฌ์์ ํด๋น ์์น๋ฅผ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ฆฌํค๊ณ ์ฐพ๋ ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์ด๋ ๋ชจํฐ์ ์ํด์ ๋์คํฌ๊ฐ ํ์ ํ๋ ์๋, Arm์ด ์ด๋ํ๋ ์๋, ์๊ฐ ๋ฑ์ด ์์ฉํ๋ค.
์ด๋ฐ ๋์คํฌ ์ ์ถ๋ ฅ ์๊ฐ์ ์ก์ธ์ค ์๊ฐ์ด๋ผ๊ณ ํ๋๋ฐ, ํ๋๋์คํฌ๋ ์ฃผ๊ธฐ์ต์ฅ์น๋ณด๋ค 1000๋ฐฐ ์ด์ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ DBMS๊ฐ ํ๋๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ/์ฝ์ด์ฌ ๋ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๋ฐ๋ผ์, DBMS๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ๊ธฐ ์ํด ๋ฒํผ ํ(Buffer Pool Memory)๋ฅผ ๋ง๋ค์ด์ ์์ฃผ ์ ๊ทผํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์๋ค ๋ฐ๋ก ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฒ ๋๋ฉด DBMS๋ ๋ฒํผ ํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ์ฝ์ด๋ค์ด๊ณ , ์์ผ๋ฉด ๊ฑฐ๊ธฐ์ ๊บผ๋ด๊ฐ๊ณ ์์ผ๋ฉด ๋์คํฌ๋ฅผ ์กฐํํ๋ ๋ฐฉ์์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
MySQL InnoDB ์์ง ์ ์ฅ ๋ฐฉ์
DBMS๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๋ก ํ๋ ์ด์์ ๋ฐ์ดํฐ ํ์ผ์ ์์ฑํด์ ์ ์ฅํ๋ค. DBMS ๋ณ๋ก ๊ณ ์ ํ ํ์ผ ๊ตฌ์กฐ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ฐ์ง๊ณ ์๋๋ฐ, MySQL์ ์ ์ฅ ๋ฐฉ์์ ๋ํด ์ดํด๋ณด์.
MySQL์ ์ ์ฅ์ฅ์น ์์ง์ InnoDB ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๋ก ๋ณ๋์ ํ์ผ์ ์์ฑํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ๋ค.
ํ์ผ | ์ค๋ช |
๋ฐ์ดํฐ ํ์ผ (ibdata) | - ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅ - ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๊ฐ ์ ์ฅ๋จ - ํ์ฅ์๋ *.ibd |
ํผํ์ผ(frm file) | - ํ
์ด๋ธ์ ๋ํ ๊ฐ์ข
์ ๋ณด์ ํ
์ด๋ธ์ ๊ตฌ์ฑํ๋ ํ๋, ๋ฐ์ดํฐ ํ์
์ ๋ํ ์ ๋ณด ์ ์ฅ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ๋จ |
๐ก์ธ๋ฑ์ค
๊ทธ๋ ๋ค๋ฉด ํ ์ด๋ธ๊ณผ ํจ๊ป ์ ์ฅ๋๋ ์ธ๋ฑ์ค๋ ๋ฌด์์ผ๊น?
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ๋ง๋ , ์ฑ ์ ๋ชฉ์ฐจ๋ ์์ธ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ปํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋นจ๋ฆฌ ์ฐพ๊ธฐ ์ํด์ ํฌํ์ ํค ๊ฐ์ ๋ํ ๋ฌผ๋ฆฌ์ ์์น๋ฅผ ๊ธฐ๋กํด๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ธ ์๋ฃ๊ตฌ์กฐ ์ค์ B-Tree๋ ํน์ํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฒ์ํ ๋ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ฅผ ์๋ํ๋ค. ์ธ๋ฑ์ค๋ ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก B-Tree๋ฅผ ์ฌ์ฉํด์ ์ ์ฅ๋๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ/์ฝ์ ์ด ๋ง์ด ์ผ์ด๋ ๊ฒฝ์ฐ B-Tree ํน์ฑ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ์ํด์ ๋ ธ๋์ ๋ถํ /์ด๋์ด ๋ง์ด ์ผ์ด๋์ผํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ ํ๋๋ ๋ฌธ์ ์ ์ด ์๋ค.
์ธ๋ฑ์ค์ ํน์ง๋ค์ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ํ ์ด๋ธ์ ํ ๊ฐ ์ด์์ ์์ฑ์ ์ด์ฉํด์ ์์ฑ
- ๋น ๋ฅธ ๊ฒ์, ํจ์จ์ ์ธ ๋ ์ฝ๋ ์ ๊ทผ์ด ๊ฐ๋ฅ
- ์์๋๋ก ์ ๋ ฌ๋ ์์ฑ๊ณผ ๋ฐ์ดํฐ ์์น๋ง ๋ณด์
- ์ ์ฅ๋ ๊ฐ๋ค์ ํ ์ด๋ธ์ ๋ถ๋ถ์งํฉ์ด ๋จ
- ๋ณดํต B-Tree์ ํํ๋ก ์ ์ฅ
- ๋ฐ์ดํฐ ์์ /์ญ์ ๋ฑ์ ๋ณ๊ฒฝ ์ ์ธ๋ฑ์ค ์ฌ๊ตฌ์ฑ์ด ํ์
MySQL ์ธ๋ฑ์ค
MySQL๋ ํด๋ฌ์คํฐ ์ธ๋ฑ์ค์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , B-Tree ํํ๋ก ์ ์ฅํ๋ค.
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ ์ฐ์๋ ํค ๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋ฌถ์ด์ ๊ฐ์ ๋ธ๋ก์ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ํ ์ด๋ธ ํ๋๋น ํ ๊ฐ๋ง ์์ฑํ๊ณ , B-Tree ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ธ๋์์ ํ ์ด๋ธ์ ์ด ์์ฒด๊ฐ ์ ์ฅ๋๋ ํํ์ด๋ค.
๊ทธ๋ฆผ์์์ ์ผ์ชฝ ํ๊ฐ ๋ฃจํธ ๋ ธ๋์ด๊ณ , ์ค๋ฅธ์ชฝ์ด ๋ฆฌํ ๋ ธ๋์ด๋ค.
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ์์ฑ์ ๊ธฐ๋ณธํค๋ฅผ ์์ฑํ๋ฉด ์๋์ผ๋ก ์์ฑ๋์ด ํ ์ด๋ธ ๊ฒ์ ์๋๋ฅผ ํฅ์ ์ํจ๋ค.
๋ณด์กฐ ์ธ๋ฑ์ค
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ ์ ๋ฌด์์ ์ฌ์ฉํ๋ค๋ณด๋ฉด, ์์๊ฐ ๋ค๋ฅด๊ฒ ๋ฌด์์๋ก ์ ์ฅ์ด ๋๋ฉด์ ๊ฒ์ ์๋๋ฅผ ์ ํ์ํจ๋ค. ์ด๋ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ค์ ํ ์ด๋ธ์ ์๋ฃ๊ฐ ๋ฌด์์๋ก ์ ์ฅ๋์ด ์๋๋ผ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ฒ ํ๋ค.
๋ณด์กฐ ์ธ๋ฑ์ค๋ ์์ฑ ๊ฐ์ผ๋ก B-Tree ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๊ณ , ๋ฆฌํ๋ ธ๋์ ๊ฐ ํ์ ํด๋น ํ์ด์ง์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ค.
์๋ ๊ทธ๋ฆผ์์์ ์ผ์ชฝ ํ๊ฐ ๋ฆฌํ๋ ธ๋์ธ๋ฐ, ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ธ๋๋ ์ค์ ๋ฐ์ดํฐ ๊ฐ์ด ์๋๋ผ, ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ์์น๋ฅผ ์ง์ ํ๋ rowid๋ฅผ ์ ์ฅํ๋ค.
์ด๋ ๊ฒ ๋๊ฐ์ง ์ธ๋ฑ์ค, ํด๋ฌ์คํฐ์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ๋ณดํต ํจ๊ป ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊ฐ๋ค.
์ธ๋ฑ์ค ์์ฑ ๋ฐฉ๋ฒ
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ๊ฒ์ ์๋๋ฅผ ๋นจ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ๋ฌด์์ ์์ฑํ๋ค๊ณ ๋นจ๋ผ์ง๋ ๊ฒ์ด ์๋๊ณ ์คํ๋ ค ๋๋ ค์ง ์ ๋ ์๋ค. ์๋ฏธ ์์ด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๊ฒ์์ด ๋ ๋๋ ค์ง๊ณ ์ ์ฅ ๊ณต๊ฐ๋ง ๋ญ๋นํ ์ ๊ฐ ์๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ค๋ค.
- ์กฐ์ธ์ ์์ฃผ ์ฌ์ฉ๋๋ ์์ฑ
- WHERE ์ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์์ฑ
- ํ ์ด๋ธ ๋น 4~5๊ฐ ์ ๋๋ฅผ ๊ถ์ฅ
์ธ๋ฑ์ค ์์ฑ
CREATE [UNIQUE] INDEX [์ธ๋ฑ์ค ์ด๋ฆ]
ON ํ
์ด๋ธ์ด๋ฆ (์ปฌ๋ผ [ASC | DESC] [{, ZJFFJA [ASC | DESC]} ...]};
CREATE INDEX ix_Book ON Book(bookname);
์ธ๋ฑ์ค ํ์ธ
SHOW INDEX FROM [ํ
์ด๋ธ๋ช
];
์ธ๋ฑ์ค์ ์ฌ๊ตฌ์ฑ
ANALYZE TABLE [ํ
์ด๋ธ์ด๋ฆ];
Reference
https://sasca37.tistory.com/215
[Database] ์ธ๋ฑ์ค ์ ๋ฆฌ (ํด๋ฌ์คํฐ, ๋ณด์กฐ ์ธ๋ฑ์ค, B+ ํธ๋ฆฌ)
INDEX INDEX๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฆด๋ ์ด์ ์ ๊ฒ์ ์ฑ๋ฅ์ ๋์ฌ์ฃผ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค. ์ผ๋ฐ์ ์ธ RDBMS์์ B+Tree ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. INDEX ๋ฐฉ์์ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋ณ๋๋ก ์ ์ฅ
sasca37.tistory.com