index
Last updated
Last updated
์ธ๋ฑ์ค
๊ฐ์
DBMS๋ ๋ด๊ฐ ๋ง๋ table์ ์ ์ฅ์ฅ์น์ ์ ์ฅํ๊ณ ํ์์ ๋ฐ๋ผ ๊ฒ์, ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
DBMS๋ ์ด๋ป๊ฒ DB๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ ๊น?
B-tree: DBMS์์ ํ ์ด๋ธ์ด ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ์ ํจ๊ป, ๋๋ถ๋ถ์ RDBMS๊ฐ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ.
MySQL์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ๋ฑ์ค ์ข ๋ฅ ์ผ๋ถ๋ฅผ ํ์ธํด๋ณด์.
DBMS๋ ์ด์์ฒด์ ์์์ ์คํ๋๋ ์์ฉํ๋ก๊ทธ๋จ์ ์ผ์ข
SQL Tool (SQL Shell or WorkBench)์ ํตํด์ SQL๋ฌธ์ ์์ฑํ๋ฉด
DBMS์ ์ํด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ๊ฒฐ์ ์ด ๋๊ณ , OS๋ฅผ ํตํด ๊ฐ ์ฅ์น์ ๋ช ๋ น์ด ๋ด๋ ค์ ธ์ ์์ ์ ์ฒ๋ฆฌํ๋ค.
์ด์์ฒด์ ์ ํ์ผ ์์คํ ์ ์ข ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ๋ก ์ ์ฅ๋๋ค. (OS file system ์ฐธ์กฐ)
์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์น๋ ๋ณด์กฐ ๊ธฐ์ต ์ฅ์น (ํ๋๋์คํฌ(ๅค), SSD, USB๋ฑ๋ฑ)
ํ๋๋์คํฌ
์ํ ํ๋ ์ดํธ๋ก ๊ตฌ์ฑ๋จ.
ํ๋ ์ดํธ๋/ ๋ ผ๋ฆฌ์ ์ผ๋ก ํธ๋์ผ๋ก ๋๋๋ฉฐ / ํธ๋์ ๋ค์ ๋ช๊ฐ์ ์นํฐ๋ก ๋๋จ
ํ์ ํ๋ ํ๋ ์ดํธ๋ฅผ ํ๋๋์คํฌ์ Actuaor Arm๊ณผ ํค๋๊ฐ ์ ๊ทผํ์ฌ ์ํ๋ ์นํฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
ํ๋๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ํฅ๋ฐ๋ 3๊ฐ์ง.
๋ชจํฐ์์ํด ๋ถ๋น ํ์ ํ๋ ์๋(RPM)
๋ฐ์ดํฐ ์ฝ์ ๋, ์์ธ์ค ์์ด ์ด๋ํ๋ ์๊ฐ (latency time)
์ฃผ ๊ธฐ์ต์ฅ์น๋ก ์ฝ์ด์ค๋ ์๊ฐ(transfer time)
์์ ๊ฐ์ ๋์คํฌ ์ ์ถ๋ ฅ์๊ฐ์ ์์ธ์ค ์๊ฐ์ด๋ผ๊ณ ํ๋ค. ์์ธ์ค ์๊ฐ์ ๋ฐ์ดํฐ์ ์ ์ฅ, ์ฝ๊ธฐ์ ๋ง์ ์ํฅ์ ๋ผ์น๋ค.
access time = seek time + rotational latency time + data transfer time
seek time : ํ์์๊ฐ, ์์ธ์ค ํค๋๋ฅผ ํธ๋์ ์ด๋์ํค๋ ์๊ฐ
rotational latency time: ํ์ ์ง์ฐ์๊ฐ, ์นํฐ๊ฐ ์์ธ์ค ํค๋์ ์ ๊ทผํ๋์๊ฐ
data transfer time: ๋ฐ์ดํฐ๋ฅผ ์ฃผ ๊ธฐ์ต์ฅ์น๋ก ์ฝ์ด์ค๋ ์๊ฐ
DBMS๊ฐ ํ๋๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฝ์ด์ฌ ๋์๋ ๊ทผ๋ณธ์ ์ธ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ๋ฐ์ ์๋ค. ์ด๋ฐ ์๋ ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํด, ์ฃผ๊ธฐ์ต์ฅ์น์ DBMS๊ฐ ์ฌ์ฉํ๋ ๊ณต๊ฐ์ค ์ผ๋ถ๋ฅผ buffer pool๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , LRU์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ์ฉ๋น๋๊ฐ ๋์ ๋ฐ์ดํฐ ์์ฃผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค. ๋ฐ์ดํฐ ๊ฒ์์, ๋ฒํผํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ์ฝ์ด๋ค์ฌ ์์ ์ ์งํํ๋ค.
DBMS๋ DB ๋ณ๋ก 1๊ฐ ์ด์์ ๋ฐ์ดํฐ ํ์ผ์ ์์ฑํ๋ค. ํ ์ด๋ธ์ ์์ฑ์ ์ ์๋ ๋ด์ฉ์ ๋ฐ๋ผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๊ฐ ๋ฐ์ดํฐ ํ์ผ์ ์ ์ฅํ๋ค. ์ด๋ฐ ํ์ผ๋ค์ DBMS ๋ณ๋ก ๊ณ ์ ํ ํ์ผ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ๋์์ ์๋ง์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ํน๋ณํ ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ ํตํด ๊ด๋ฆฌ๋๋ค.
MySQL์ ์ ์ฅ์ฅ์น ์์ง์ ํ๋ฌ๊ทธ์ธ ๋ฐฉ์์ผ๋ก ์ ํ์ด ๊ฐ๋ฅํ๊ณ , InnoDB ์์ง์ด ๊ธฐ๋ณธ์ผ๋ก ์ค์น๋์ด์๋ค. MySQL์ InnoDB๋ ์ฃผ๋ก ๋ฐ์ดํฐํ์ผ, ํผํ์ผ๋ฑ์ ์ ์ฅํ๋ค. ์์ฑํ DB ๋ณ๋ก ๊ด๋ฆฌ.
์ธ๋ฑ์ค (์์ธ)
์๋ฃ๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฐพ์์ ์๋๋ก ๋ง๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
์ผ๋ฐ์ ์ธ RDBMS์ ์ธ๋ฑ์ค๋ ๋๋ถ๋ถ B-tree ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
B-tree
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ํ์ผ ์์คํ ์์ ๋ง์ด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ.
๋ฐ์ดํฐ์ ๊ฒ์์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ
์ด์ง ํธ๋ฆฌ: ์์๋ ธ๋๊ฐ ์ต๋ 2๊ฐ, B-tree ๋ ์์ ๋ ธ๋ ๊ฐฏ์๊ฐ 2๊ฐ ์ด์์ธ ํธ๋ฆฌ.
๋ฃจํธ๋ ธ๋, ๋ด๋ถ๋ ธ๋, ๋ฆฌํ๋ ธ๋๋ก ๊ตฌ์ฑ.
๋ ธ๋์ ๋ฐ์ดํฐ๋ ๋ฐ๋์ ์ ๋ ฌ๋ ์ํ์ฌ์ผ ํ๋ค.
Leaf ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ชจ๋ ๊ฐ์์ผํ๋ค. ์ฆ, ๋ชจ๋ ๊ฐ์ ๋ ๋ฒจ์ ์กด์ฌํด์ผํ๋ค.
(๊ท ํ ํธ๋ฆฌ)
๊ฐ ๋ ธ๋๋ ํค๊ฐ๊ณผ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ํค๊ฐ์ ์ค๋ฆ์ฐจ ์ ๋ ฌ ๋์ด์์. ํค์ ์ข์ฐ์ ์๋ ํฌ์ธํฐ๋ ๊ฐ๊ฐ ํค ๊ฐ๋ณด๋ค ์์ ๊ฐ๊ณผ ํฐ ๊ฐ์ ๊ฐ์ง ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํด.
์ ๋ ฅ ์๋ฃ๋ ์ค๋ณต๋ ์ ์์.
ํ์:
์ด์งํธ๋ฆฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ๊ฐ์ ์ผ์ชฝ, ํฐ๊ฐ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์ด๋ค์ ธ์์.
๋ฃจํธ ๋ ธ๋์์ ๊ฐ์ ๋น๊ตํด์ ์ค๊ฐ๋จ๊ณ์ธ ๋ด๋ถ๋ ธ๋์์ ํด๋น ๋ ธ๋๋ฅผ ์ฐพ๊ณ , ์ต์ข ๋ง์ง๋ง ๋ ๋ฒจ์ธ ๋ฆฌํ๋ ธ๋์ ๋๋ฌ. ๋ฆฌํ ๋ ธ๋์๋ ํด๋น ๋ฐ์ดํฐ ์ ์ฅ ์์น์ ๋์ํ๋ rowid(RID, Row IDentify, ํ ์ด๋ธ ํ์ ๋ํ ๋ ผ๋ฆฌ์ ์์น)๋ฅผ ๊ฐ์ง๊ณ ์์ด ์ฐพ๊ณ ์ ํ๋ ํ์ ๋ฐ๋ก ์ฐพ์ ์ ์๋ค.
์ฝ์ , ์ญ์ ๋ฑ ๊ฐฑ์ ์: ์ฐจ์์ ๋ฐ๋ผ ๋ค๋ฆ. ๋์ ์ผ๋ก ๋ ธ๋๋ฅผ ๋ถํ ํ๊ฑฐ๋ ํตํฉํ๋ฉด์ ๊ท ํ ์ ์ง
์ธ๋ฑ์ค ํน์ง
์ธ๋ฑ์ค๋ ํ ์ด๋ธ์์ ํ ๊ฐ ์ด์์ ์์ฑ(col)์ ์ด์ฉํ์ฌ ์์ฑํจ.
๋น ๋ฅธ ๊ฒ์๊ณผ ํจ๊ป ํจ์จ์ ์ธ ๋ ์ฝ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํจ.
์์๋๋ก ์ ๋ ฌ๋ ์์ฑ๊ณผ ๋ฐ์ดํฐ์ ์์น๋ง ๋ณด์ ํ๋ฏ๋ก ํ ์ด๋ธ๋ณด๋ค ์์ ๊ณต๊ฐ์ ์ฐจ์งํจ.
์ ์ฅ๋ ๊ฐ๋ค์ ํ ์ด๋ธ์ ๋ถ๋ถ์งํฉ์ด ๋จ.
์ผ๋ฐ์ ์ผ๋ก B-tree ํํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
๋ฐ์ดํฐ์ ์์ , ์ญ์ ๋ฑ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ์ธ๋ฑ์ค์ ์ฌ๊ตฌ์ฑ์ด ํ์ํจ.
100๋ง๊ฐ์ ํํ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ 3-4๋ฒ์ ๋์คํฌ ๋ธ๋ก์ ์ฝ์ผ๋ฉด ์ฐพ์ ์ ์๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ, ์ฝ์ ์ด ๋ง์ ๊ฒฝ์ฐ ๋ชจ์ ์ ์ง๋ฅผ ์ํด ๋ถํ ๋ฐ ์ด๋์ด ์ฆ๋ค.
MySQL ์ธ๋ฑ์ค
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค(Clustered Index) & ๋ณด์กฐ ์ธ๋ฑ์ค (Secondary Index)
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค
์ฐ์๋๋ ํค๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋ฌถ์ด์ ๊ฐ์ ๋ธ๋ก์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
ํ ์ด๋ธ๋น ํ๋๋ง ์์ฑ ๊ฐ๋ฅ
B-tree ์ธ๋ฑ์ค ๋ฆฌํ ๋ ธ๋์์ ํ์ด์ง์ ์ฃผ์ ๋์ , ํ ์ด๋ธ์ ์ด ์์ฒด๊ฐ ์ ์ฅ๋๋ ํํ
๋ฆฌํ ๋ ธ๋๋ค์ด ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ๋ ํ ์ด๋ธ ์์ฒด๊ฐ ๋๋ค.
๋ฃจํธ ๋ ธ๋์ ํค๊ฐ์ ๋น๊ตํด์, ํด๋น ๋ฆฌํ ๋ ธ๋๋ก ์ด๋ํ์ฌ ๋ฆฌํ ๋ ธ๋์ ํ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
ํค ๊ฐ์ ์ํ ๋๋ฑ ๋ฐ ๋ฒ์(between) ๊ฒ์์ ๋ชจ๋ ์ ๋ฆฌ
ํ ์ด๋ธ ์์ฑ์ ๊ธฐ๋ณธํค (PK)๋ฅผ ์์ฑํ๋ฉด ์๋ ์์ฑ ๋๋ค.
์ธ๋ฑ์ค ํ์ด์ง๊ฐ ๋จ์ํด์ ธ ์ธ๋ฑ์ค ์ ์ฅ์ ์ฐจ์งํ๋ ๊ณต๊ฐ์ด ์๋ค.
์์ฑ์ PK โ UNIQUE โ ์์ฒด rowId ์์๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑ.
๋ณด์กฐ ์ธ๋ฑ์ค
์์ฑ์ ๊ฐ์ผ๋ก B-tree ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ฉฐ, ๋ฆฌํ๋ ธ๋์ ๊ฐ ํ์ ํด๋น ํ์ด์ง์ ์ฃผ์ ๊ฐ ์ง์
ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋๋ ์ญ์ ๋๋ฉด์ ๋ฌด์์๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. ์ด ๋, ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์์ด ๋ง๋ค๋ฉด ์ํ๋ ์๋ฃ๋ฅผ ์ฐพ๊ธฐ ์ํ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
์์ฑ๋ ์ธ๋ฑ์ค์ ๋ฆฌํ๋ ธ๋๋ ์ค์ ๋ฐ์ดํฐ ๊ฐ์ด ์๋๋ผ, ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ์์น๋ฅผ ์ง์ ํ๋ rowid๋ฅผ ์ ์ฅํ๋ค. (ex. Block๋ฒํธ - Block ๋ด์ Row๊ฐ ์์นํ ์๋ฒ)
๋ฐ๋ผ์ ์ค์ ํ ์ด๋ธ์ ์๋ฃ๊ฐ ๋ฌด์์๋ก (์ ๋ ฌ๋์ง ์์ ์ฑ๋ก) ์๋๋ผ๋, ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
๋จ์ผ ์ปฌ๋ผ ์ธ๋ฑ์ค ๋ฟ๋ง ์๋๋ผ ๋ณตํฉ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค๋ ๋ง๋ค ์ ์๋ค.
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ชจ๋ ์ธ๋ฑ์ค๋ ๋ณด์กฐ ์ธ๋ฑ์ค.
๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ์ฌ ๊ธฐ๋ณธํค ์์ฑ์ ์ฐพ์ ๋ค์, ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ก ๊ฐ์ ํด๋น ๋ ์ฝ๋(row)๋ฅผ ์ฐพ๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ํ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ ํ์ผ์ ๊ตฌ์กฐ์ ์ธ ํน์ง์ผ๋ก ์ธํด ํน์ ํค ๊ฐ์ ์ฐพ๋ ๊ฒ์์ ๊ฒฝ์ฐ๋ ์ฑ๋ฅ ๋ณด์ฅ์ด ๊ฐ๋ฅ.
ํ์ง๋ง ๋ฒ์ ๊ฒ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ Blcok ๊ฐ๋ค์ ์ ์ฅ ์์๊ฐ ์ผ์ ์น ์์ ์ ์์ด์, ์ํ๋ ๋งํผ์ ๋น ๋ฅธ ๊ฒ์ ํจ๊ณผ๋ฅผ ๋ณด์ฅ ํ ์ ์์.
๋ฐ๋ผ์ ์ธ๋ฑ์ค ๊ตฌ์ฑ์ ์๋ฃ ์ ์ฅ ๋ฐ ์ง์ ํํ์ ๋ฐ๋ผ ์ ์คํ ์์ฑ ํด์ผ ํ๋ค.
์ธ๋ฑ์ค๋ ๊ฒ์ ์๋ ํฅ์์ ์ํด ์ฌ์ฉ
ํ์ง๋ง, ์ธ๋ฑ์ค ์ฌ์ฉํ๋ค๊ณ (์์ฑํ๋ค๊ณ ) ๋ฐ์ดํฐ ๊ฒ์์ด ๋ฌด์กฐ๊ฑด ๋นจ๋ผ์ง๋๊ฒ ์๋.
๋ฐ์ดํฐ ์์ด ๋ณ๋ก ์๊ฑฐ๋, ๋ฐ์ดํฐ ๊ฐ์ด ๋ช ์ข ๋ฅ ์๋๋ฉด ์ธ๋ฑ์ค ์๋๊ฒ ๋น ๋ฅผ ์๋ ์์
(=์ ํ๋๊ฐ ๋๋ค๊ณ ํํํจ. = 1/์๋ก๋ค๋ฅธ ๊ฐ์ ๊ฐ์)
์๋ฏธ ์์ด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ์คํ๋ ค ๊ณต๊ฐ ๋ญ๋น, ๊ฒ์ ์๋๊ฐ ๋จ์ด์ง ์ ์์.
์ธ๋ฑ์ค ์์ฑ ๊ณ ๋ ค ์ฌํญ.
์ธ๋ฑ์ค๋ WHERE์ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์์ฑ์ด์ด์ผ ํจ.
[where์ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์์ฑ์ผ ์๋ก ์์ฃผ ์ ๊ทผํ๋ค๋ ์๋ฏธ๋๊น.]
์ธ๋ฑ์ค๋ Join(์กฐ์ธ)์ ์์ฃผ ์ฌ์ฉ๋๋ ์์ฑ์ด์ด์ผ ํจ.
๋จ์ผ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ๋ง์ผ๋ฉด ์๋๊ฐ ๋๋ ค์ง ์ ์์
์์ฑ์ด ๊ฐ๊ณต๋๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ์ง ์์
์์ฑ์ ์ ํ๋๊ฐ ๋ฎ์ ๋ ์ ๋ฆฌํจ
๋จ, ๋ฌด๋ถ๋ณํ๊ฒ ์ธ๋ฑ์ค ๋ง์ด ์์ฑํ๋ฉด ์คํ๋ ค ํจ์จ์ด ๋๋ ค์ง ์ ์์. ํ ์ด๋ธ๋น 4~5๊ฐ ์ ๋ ๊ถ์ฅ.
๋ฌธ๋ฒ
์ธ๋ฑ์ค ์์ฑ ์์
์์ฑ๋ index๋ก SQL๋ฌธ์ ์ฒ๋ฆฌํ๋์ง ํ์ธ
workbench โ[Queryํญ] โ [Explain Current Statment]
์คํ ๊ฒฐ๊ณผ
[ํ๋๋์คํฌ ๊ตฌ์กฐ ์๋ฃ ] https://gsk121.tistory.com/260
[MySQL DBMS๊ตฌ์กฐ] : https://mysqldba.tistory.com/2
[B-tree] https://hyungjoon6876.github.io/jlog/2018/07/20/btree.html
[MySQL๋ก ๋ฐฐ์ฐ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ฐ๋ก ๊ณผ ์ค์ต ์ฑ ๋ด์ฉ ์์ฝ ๋ฐ ์ ๋ฆฌ]