Clustering index
ํด๋ฌ์คํฐ๋ง์ ์ฌ์ ์ ์๋ฏธ๋ ์ ์ฌํ ์์ฑ์ ๊ฐ๋ ์์๋ฅผ ๊ตฐ์ง์ผ๋ก ๋ฌถ์ด์ฃผ๋ ์์ ์ด๋ค. ์ธ๋ฑ์ค์์ ํด๋ฌ์คํฐ๋ง์ด๋ ๋จ์ด๋ ์๋ฏธ๋ฅผ ํฌ๊ฒ ๋ฒ์ด๋์ง ์๋๋ค.
MySQL์์ ํด๋ฌ์คํฐ๋ง์ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ PK ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด์ ์ ์ฅํ๋ ํํ๋ก ๊ตฌํ๋๋๋ฐ, InnoDB ์์ง์์๋ง ์ง์ํ๋ฉฐ, ๋๋จธ์ง ์คํ ๋ฆฌ์ง ์์ง์์๋ ์ง์ํ์ง ์๋๋ค.
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
์์์๋ ์ธ๊ธํ๋ฏ์ด ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ PK์ ๋ํด์๋ง ์ ์ฉ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ PK ๊ฐ์ ์ํด ๋ ์ฝ๋์ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋๋ค. ๋, PK๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ๊ทธ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น๊ฐ ๋ฐ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
PK๋ก ํด๋ฌ์คํฐ๋ง๋ ํ ์ด๋ธ์ PK ์์ฒด์ ์์กด๋๊ฐ ์๋นํ๊ธฐ ๋๋ฌธ์ ์ ์คํ ๊ฒฐ์ ํด์ผ ํ๋ค.

ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด B-Tree์ ์ ์ฌํ์ง๋ง ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ํ B-Tree ๋ฆฌํ ๋ ธ๋์ ๋ฌ๋ฆฌ ๋ฆฌํ ๋ ธ๋์ ๋ ์ฝ๋์ ๋ชจ๋ ์ปฌ๋ผ(๋ฐ์ดํฐ)๊ฐ ์ ์ฅ๋์ด ์๋ค. ์ฆ, ํด๋ฌ์คํฐ๋ง ํ ์ด๋ธ์ ๊ทธ ์์ฒด๊ฐ ํ๋์ ๊ฑฐ๋ํ ์ธ๋ฑ์ค ๊ตฌ์กฐ์ด๋ค.
ํด๋ฌ์คํฐ๋ง ํ ์ด๋ธ์ update๊ฐ ์ํ๋๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น?
์ฒ์ ๊ทธ๋ฆผ์์๋ emp_no=100007์ธ ๋ ์ฝ๋๋ 3๋ฒ ํ์ด์ง์ ์ ์ฅ๋์ด ์์๋ค. ํ์ง๋ง ์๋ ๊ทธ๋ฆผ์์๋ emp_no๊ฐ 100002๋ก ๋ณ๊ฒฝ๋๋ฉด์ 2๋ฒ ํ์ด์ง๋ก ์ด๋ํ๋ค. ์ค์ ๋ก PK๊ฐ ๋ณ๊ฒฝ๋๋ ์ผ์ ์์ง๋ง ์ด๋ฐ์์ผ๋ก ์๋ํ๋ค.

MyISAM, ๊ธฐํ InnoDB๋ฅผ ์ ์ธํ ํ
์ด๋ธ์ ๋ ์ฝ๋๋ PK๋ ์ธ๋ฑ์ค ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค๊ณ ํด์ ์ค์ ๋ ์ฝ๋ ์์น๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค. INSERT ๋ ๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ ๋๋ ๋น ๊ณต๊ฐ์ ์ ์ฅ๋๋ค.
ํ๋ฒ ๊ฒฐ์ ๋ ์์น๋ ์ ๋ ๋ฐ๋์ง ์๊ณ , ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ MySQL ๋ด๋ถ์ ์ผ๋ก ๋ ์ฝ๋๋ฅผ ์๋ณํ๋ ID๋ก ์ธ์ํ๊ฒ ๋๋ค. ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ROW-ID๋ผ๊ณ ํํํ๋ฉฐ, MySQL์์๋ ์ฌ์ฉ์์๊ฒ ๋
ธ์ถ๋์ง ์๋๋ค.
๐ค ๊ทธ๋ผ PK๊ฐ ์๋ InnoDB ํ ์ด๋ธ์ ์ด๋ป๊ฒ ํด๋ฌ์คํฐ๋ง ํ ์ด๋ธ๋ก ๊ตฌ์ฑํ๋๊ฐ?
PK๊ฐ ์๋ ๊ฒฝ์ฐ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ด ๋ค์ ์ฐ์ ์์๋๋ก PK๋ฅผ ๋์ฒดํ ์ปฌ๋ผ์ ์ ํํ๋ค.
PK๊ฐ ์กด์ฌํ๋ฉด ๊ทธ ์ปฌ๋ผ์ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ ํ
NOT NULL ์ต์ ์ UNIQUE INDEX ์ค์์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ ํ
์๋์ผ๋ก ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ง๋๋ก ์ฆ๊ฐ๋๋ ์ปฌ๋ผ์ ๋ด๋ถ์ ์ผ๋ก ์ถ๊ฐํ์ฌ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ ํ
์ด๋๋ ํค ํ๋ณด๋ฅผ ๋ชป ์ฐพ์ผ๋ฉด InnoDB ์คํ ๋ฆฌ์ง ์์ง์ด ๋ด๋ถ์ ์ผ๋ก ๋ ์ฝ๋์ ์ผ๋ จ๋ฒํธ ์ปฌ๋ผ์ ์์ฑ
์๋์ผ๋ก ์์ฑ๋ ์ผ๋ จ๋ฒํธ๋ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ๋์ง ์์ผ๋ฉฐ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๋ช ์ํด์ ์ฌ์ฉํ ์ ์๋ค.
์ฆ, ์ธ๋ฑ์ค๊ฐ ์ ํ ์๋ InnoDB ํ ์ด๋ธ์์๋ ์๋ฌด ์๋ฏธ ์๋ ์ซ์๊ฐ ํด๋ฌ์คํฐ๋ง ๋๋ค.
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ ํ ์ด๋ธ๋น ํ๋๋ง ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ฉด PK๋ฅผ ์์ฑํ์.
์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค์ ๋ฏธ์น๋ ์ํฅ
MyISAM, MEMORY ํ ์ด๋ธ ๊ฐ์ ํด๋ฌ์คํฐ๋ง ๋์ง ์์ ํ ์ด๋ธ์ INSERT ๋ ๋ ์ฒ์ ์ ์ฅ๋ ๊ณต๊ฐ์์ ์ ๋ ์ด๋ํ์ง ์๋๋ค. ๊ทธ๋์ MyISAM, MEMORY ํ ์ด๋ธ์์๋ PK์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ๊ตฌ์กฐ์ ์ผ๋ก ์ฐจ์ด๊ฐ ์๋ค.
๐ค InnoDB ํ ์ด๋ธ์์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๊ฐ ์ค์ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด?
ํด๋ฌ์คํฐ๋ง ํค ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ค์ ๋ ์ฝ๋ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๊ณ , ํด๋น ํ ์ด๋ธ์ ๋ชจ๋ ์ธ๋ฑ์ค์ ์ ์ฅ๋ ์ฃผ์๊ฐ์ ๋ณ๊ฒฝํด์ผ ํ๋ค.
์ด๋ฌํ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด InnoDB์ ๋ชจ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๊ฐ ์๋๋ผ PK ๊ฐ์ ์ ์ฅํ๋๋ก ๊ตฌํ๋ผ ์๋ค.
์๋ ์์์์, first_name์ ์ธ๋ฑ์ค๋ก ์ค์ ํ๊ณ PK๋ก ํด๋ฌ์คํฐ๋ง ๋ InnoDB์ ๊ทธ๋ ์ง ์์ MyISAM์ ์ฐจ์ด๋ฅผ ๋ณด์.
MyISAM: idx_firstname ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํด์ ๋ ์ฝ๋์ ์ฃผ์๋ฅผ ํ์ธํ๊ณ ๋ ์ฝ๋ ์ฃผ์๋ฅผ ์ด์ฉํด์ ์ต์ข ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
InnoDB: ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํด ๋ ์ฝ๋์ PK๋ฅผ ํ์ธํ๊ณ PK๋ฅผ ๊ฒ์ํด์ ์ต์ข ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ณผ์ ๋ง ๋ด๋ InnoDB๊ฐ ๋ ์ ๊ฒ ์ํํ๋ค.
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ์ฅ๋จ์
์ฅ์ :
PK๋ก ๊ฒ์ํ ๋ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค.
ํ ์ด๋ธ์ ๋ชจ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๊ฐ PK๋ฅผ ๊ฐ์ง๊ณ ์์ด์ ์ธ๋ฑ์ค๋ง์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ (์ปค๋ฒ๋ง ์ธ๋ฑ์ค)
๋จ์ :
ํ ์ด๋ธ์ ๋ชจ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๊ฐ PK๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ PK์ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ฒ์ํ ๋ PK๋ก ๋ค์ ํ๋ฒ ๊ฒ์ํด์ผํ๋ค.
INSERTํ๋ฉด PK์ ์ํด ๋ ์ฝ๋์ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋์ด ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋๋ฆฌ๋ค.
PK๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ ์ฝ๋๋ฅผ DELETE โ INSERT ํ๋ ์์ ์ด ํ์ํ์ฌ ์ฒ๋ฆฌ๊ฐ ๋๋ฆฌ๋ค.
๋๋ถ๋ถ์ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ์ฅ์ ์ ๋น ๋ฅธ ์ฝ๊ธฐ, ๋จ์ ์ ๋๋ฆฐ ์ฐ๊ธฐ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์จ๋ผ์ธ ํธ๋์ญ์ ํ๊ฒฝ(OLTP)์์๋ ์ฐ๊ธฐ์ ์ฝ๊ธฐ ๋น์จ์ด 2:8, 1:9 ์ ๋๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋๋ฆฐ ์ฐ๊ธฐ๋ฅผ ๊ฐ์ํ๊ณ ์ฝ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์งํ๋ ๊ฒ์ ์ค์ํ๋ค.
ํด๋ฌ์คํฐ๋ง ํ
์ด๋ธ ์ฌ์ฉ ์ฃผ์์ฌํญ
ํด๋ฌ์คํฐ๋ง ๋์ง ์์ ํ ์ด๋ธ์ ๋นํด InnoDB์ ๊ฐ์ ํด๋ฌ์คํฐ๋ง ํ ์ด๋ธ์์๋ ์ฃผ์ํด์ผ ํ ์ฌํญ์ด ์๋ค.
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ํค์ ํฌ๊ธฐ
๋ชจ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ํด๋ฌ์คํฐ๋ง ํค๋ฅผ ํฌํจํ๋ค. ๊ทธ๋์ PK์ ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ค๋ฉด ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ๊ฐ์ด ์ปค์ง๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ์ด๋ธ์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๊ฐ 4~5๊ฐ ์์ฑ๋๋ ๊ฒ์ ๊ณ ๋ คํ๋ฉด ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค ํฌ๊ธฐ๋ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ค. 5๊ฐ์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ ํ ์ด๋ธ์ PK ํฌ๊ธฐ์ ๋ฐ๋ผ ๊ฒฝ์ฐ๋ฅผ ๋น๊ตํด๋ณด์.
์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ธ๋์๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค ํค ๊ฐ๊ณผ ํด๋น ๋ ์ฝ๋์ PK ๊ฐ์ด ์ ์ฅ๋๋ค.
10bytes
10 * 5 = 50 ๋ฐ์ดํธ
50 * 1,000,000 = 47MB
50bytes
50 * 5 = 250 ๋ฐ์ดํธ
250 * 1,000,000 = 238MB
PK๋ AUTO-INCREMENT ๋ณด๋ค๋ ์
๋ฌด์ ์ธ ์ปฌ๋ผ์ผ๋ก ์์ฑ(๊ฐ๋ฅํ๋ฉด)
InnoDB๋ PK๊ฐ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ฌ์ฉ๋๊ณ ๋ ์ฝ๋์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค. ๊ทธ๋์ PK๋ก ๋ฒ์ ๊ฒ์์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋ค. MyISAM๊ณผ ๊ฐ์ด ํด๋ฌ์คํฐ๋ง ๋์ง ์๋ ํ ์ด๋ธ์ ๋นํด ์์ฒญ๋ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ทธ ์ปฌ๋ผ์ ํฌ๊ธฐ๊ฐ ํฌ๋๋ผ๋ ํด๋น ๋ ์ฝ๋๋ฅผ ๋ํํ ์ ์๋ค๋ฉด ๊ทธ ์ปฌ๋ผ์ PK๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
AUTO-INCREMENT ์ปฌ๋ผ์ ์ธ์กฐ ์๋ณ์๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ
๋ณตํฉ ์ปฌ๋ผ์ผ๋ก PK๊ฐ ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ, PK์ ๋ฐ์ดํฐ ์ฌ์ด์ฆ ํฌ๊ธฐ๊ฐ ์ปค์ง ๋๊ฐ ์๋ค. ํ์ง๋ง PK๊ฐ ์ปค์ ธ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๊ฐ ํ์ํ์ง ์๋ค๋ฉด ๊ทธ๋๋ก PK๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ธ์ปจ๋๋ฆฌ๋ ํ์ํ๊ณ PK์ ํฌ๊ธฐ๋ ํฌ๋ค๋ฉด AUTO_INCREMENT ์นผ๋ผ์ ์ถ๊ฐํ๊ณ PK๋ก ์ค์ ํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ PK๋ฅผ ๋์ฒดํ๊ธฐ ์ํ ์ธ์์ ์ผ๋ก ์ถ๊ฐ๋ PK๋ฅผ ์ธ์กฐ ์๋ณ์(Surrogate key)๋ผ๊ณ ํ๋ค.
๋ก๊ทธ ํ ์ด๋ธ๊ณผ ๊ฐ์ด ์กฐํ๋ณด๋ค INSERT ์์กฐ์ ํ ์ด๋ธ์ AUTO_INCREMENT๋ฅผ ์ด์ฉํ ์ธ์กฐ ์๋ณ์๋ฅผ PK๋ก ์ค์ ํ๋ ๊ฒ์ ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋๋ค๊ณ ํ๋ค.
Q&A
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ B-Tree๋ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ?
๋ฐ์ดํฐ ์ ์ฅ
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ ๋ฆฌํ ๋ ธ๋์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
B-Tree๋ ๋ฆฌํ ๋ ธ๋์ ํค์ ๋ฐ์ดํฐ ์ฃผ์๋ง ์ ์ฅํ๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ PK ๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ ์ฌ๋ฐฐ์น๊ฐ ํ์ํ๋ค.
B-Tree๋ ์๋์ ์ผ๋ก ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค.
๊ฒ์ ์ฑ๋ฅ
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ PK ๊ธฐ๋ฐ ๊ฒ์์ด ๋งค์ฐ ๋น ๋ฅด๋ค.
B-Tree๋ ๋ชจ๋ ํค์ ๋ํด ๊ท ์ผํ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
Last updated