์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ์กฐํ๊ฐ ์ ๋น ๋ฅธ์ง์ ๋ํ ์๋ฌธ์ ํด์ํ๊ณ ์ Real MySQL์ ํ์ตํ๊ฒ ๋์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์๊ธฐ ์ , ์ด๋ป๊ฒ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋์ง๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
8.1 ๋์คํฌ ์ฝ๊ธฐ ๋ฐฉ์
# ๊ธฐ๊ณ์ ์ฅ์น์ธ HDD(ํ๋ ๋์คํฌ)
๊ธฐ์กด ๋ฐ์ดํฐ๋ ๊ธฐ๊ณ์ ์ฅ์น์ธ ์ํ ๋ชจ์์ HDD(ํ๋ ๋์คํฌ)์ ์ ์ฅํ์์ต๋๋ค.
HDD๋ ์ํ์ ๋๋ ค๊ฐ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋คI/O ์์ ์ ๋งค์ฐ ๋นํจ์จ์ ์ด์์ต๋๋ค.
# ์ ์์ ์ฅ์น์ ๋ฑ์ฅ
HDD์ ๋จ์ ์ ๋ณด์ํ๊ณ ์ SSD, CPU, ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ด ์ ๊ธฐ์ ํน์ฑ์ ๋ ์ ์์ ์ฅ์น๊ฐ ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
SSD๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ํด HDD๋ฅผ ํ์ ์ํฌ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์์ ์ด ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
๊ทธ๋ฆฌ๊ณ , DBMS๊ฐ ์ด SSD๋ฅผ ์ฑํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด SSD ๋ ์์ฐจI/O ์ ๋๋คI/O ๊ฐ์ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์กด์ฌํฉ๋๋ค.
๊ทธ๋ ๊ธฐ์ ๋๋คI/O ์์ฒด๋ฅผ ์ค์ฌ์ฃผ๋ฉด ์ฑ๋ฅ์ด ์ข์์ง๋๋ฐ, ์ด ์์ ์ ์ธ๋ฑ์ค๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ์ ๋๋ค.
8.2 ์ธ๋ฑ์ค
# ์ธ๋ฑ์ค ๊ตฌ์กฐ
์ธ๋ฑ์ค๋ key-value ๊ตฌ์กฐ๋ก ๋ณดํต key ์๋ column ์ ๊ฐ, value ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
# ์ธ๋ฑ์ค ํน์ง
DBMS๋ ์ธ๋ฑ์ค๋ฅผ column ์ ๊ฐ์ ์ด์ฉํด ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
ํญ์ ์ ๋ ฌ์ ์ ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด์ ์ ์ฅํ๋ ๊ณผ์ ์ ๋๋ฆด ์ ๋ฐ์ ์์ต๋๋ค.
ํ์ง๋ง, ํญ์ ์ ๋ ฌ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ฌ ์ ์์ต๋๋ค,
์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์๊ฐ์ ํ๊ฒ ๋์์ต๋๋ค.
์ธ๋ฑ์ค๊ฐ ๋ง์ ํ ์ด๋ธ์์ INSERT, UPDATE, DELETE ๋ฌธ์ฅ์ ์ฒ๋ฆฌ๋ ๋๋ ค์ง์ง๋ง, SELECT ๋ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
CQRS ํจํด(๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์ ์ ๋ถ๋ฆฌ)์ ๋ค์ด๋ณธ ์ ์ด ์์ต๋๋ค.
์ธ๋ฑ์ค๊ฐ ๋ง์ ํ ์ด๋ธ์์ ์ธ๋ฑ์ค ์ฐ๊ธฐ ์์ ๊ณผ ์กฐํ ์์ ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ ๋, ์ฐ๊ธฐ ์์ ๊ณผ ์กฐํ ์์ ์ ์ฑ๋ฅ์ ๋ ๋ค ๋์ด๊ธฐ ์ํด ๊ณ ๋ คํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ง, ์ด๋ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฌธ์ ๋ฅผ ์ถฉ๋ถํ ๊ณ ๋ คํด์ผ ํ์ง ์์๊น ์๊ฐํ๋ฉฐ ์ถํ์ ๊ณต๋ถํด๋ณด๊ฒ ์ต๋๋ค.
์ฆ, ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์ ์ฅ(์ฐ๊ธฐ)์ฑ๋ฅ์ ํฌ์ํ๊ณ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฅ์ ๋๋ค.
ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ํ๋ ๋ ์ถ๊ฐํ ์ง ๋ง์ง๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์๋๋ฅผ ์ด๋๊น์ง ํฌ์ํ ์ ์๋์ง, ์ฝ๊ธฐ ์๋๋ฅผ ์ผ๋ง๋ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ ํ ์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
* SELECT ์ WHERE ์ ์ ์ฌ์ฉ๋๋ column ์ด๋ผ๊ณ ์ ๋ถ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ์ฐ๊ธฐ ์์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค.
# ์ธ๋ฑ์ค ์๊ณ ๋ฆฌ์ฆ B-Tree ์ Hash
- B-Tree ์ธ๋ฑ์ค๋ column ์ ์ ์ฅ๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
- Hash ์ธ๋ฑ์ค๋ column ์ ๊ฐ์ผ๋ก ํด์๊ฐ์ ๊ณ์ฐํด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ํด์๋งต์ ์กฐํ๊ฐ O(1) ์ธ ๊ฒ์ฒ๋ผ, Hash ์ธ๋ฑ์ค์ผ ๊ฒฝ์ฐ ์กฐํ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
- ํ์ง๋ง, column ์ ๊ฐ์ ๋ณํํ๊ธฐ ๋๋ฌธ์ column ์ ๊ฐ์ผ๋ก ๋ฒ์ ๊ฒ์์ ํ๊ฑฐ๋ ์ผ๋ถ๋ง์ ๊ฒ์ํ ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ Hash์ธ๋ฑ์ค๋ ๋ฉ๋ชจ๋ฆฌDB์ธ Redis ๋ ์คํ๋ง๋ถํธ์ ๋ด์ฅ๋ ๋ฉ๋ชจ๋ฆฌDB์ธ h2 ์์ ์ฌ์ฉ๋ฉ๋๋ค.
8.3 B-Tree ์ธ๋ฑ์ค
8.3.1 B-Tree ๊ตฌ์กฐ
B-Tree ์ B๋ Binary(์ด์ง) ํธ๋ฆฌ๊ฐ ์๋๋ผ Balanced ๋ฅผ ์๋ฏธํฉ๋๋ค.
ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ต์์์ ํ๋์ ๋ฃจํธ(Root) ๋ ธ๋๊ฐ ์กด์ฌํ๊ณ , ํธ๋ฆฌ๊ตฌ์กฐ์ ๊ฐ์ฅ ํ์์ ์๋ ๋ ธ๋๋ฅผ ๋ฆฌํ(Leaf) ๋ ธ๋๋ผ ํ๊ณ , ํธ๋ฆฌ๊ตฌ์กฐ์์ ๋ฃจํธ๋ ๋ฆฌํ๋ ์๋ ์ค๊ฐ ๋ ธ๋๋ฅผ ๋ธ๋์น(Branch) ๋ ธ๋๋ผ ํฉ๋๋ค.
์ธ๋ฑ์ค(B-Tree)์ ๋ฆฌํ ๋ ธ๋๋ ํญ์ ์ค์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ์๊ฐ๊ธฐ ์ํ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
* ์ธ๋ฑ์ค ๋ฐ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ ํ์ผ ํํ๋ก SSD์ ์ ์ฅ๋ฉ๋๋ค.
์ธ๋ฑ์ค์ ํค๋ ์ ๋ ฌ๋์ด ์์ง๋ง, ์๋ ๊ทธ๋ฆผ ์ฒ๋ผ ๋๋ถ๋ถ์ RDBMS์์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ ์ ๋ ฌ๋ผ ์์ง ์๊ณ ๋ฌด์์ ์์๋ก ์ ์ฅ๋ฉ๋๋ค.
๋ฐ์ดํฐ ๋ ์ฝ๋๊ฐ ๋ฌด์์ ์์๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ Random I/O ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ฌํ RandomI/O ์ค์ด๊ธฐ ์ํด ์ ๋ ฌ๋์ด ์๋ ์ธ๋ฑ์ค๋ก ์กฐํ๋ฅผ ํ์ฌ ์์ฐจ I/O ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ํด๋น ์ธ๋ฑ์ค๋ก ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋, ์๋ ๊ทธ๋ฆผ์ ๋ ธ๋์ ์ ์ ๋ฐ๋ผ B-Tree ๋ฅผ 2๋ฒ ํ์ํฉ๋๋ค. ์ธ์ปจ๋๋ฆฌ B-Tree ์ธ๋ฑ์ค์ key ๋ column ์ ์ค์ ๊ฐ, value ์ PK๊ฐ์ด ๋ค์ด๊ฐ๋๋ค.
์ด๊ฒ์ด MySQL 8.0 ๊ณผ ๋ค๋ฅธ RDBMS ์ ๋ค๋ฅธ ํน์ง๋ค ์ค ํ๋์ ๋๋ค.
8.3.2 B-Tree ์ธ๋ฑ์ค ํค ์ถ๊ฐ ๋ฐ ์ญ์
์ธ๋ฑ์ค๋ ์ฐ๊ธฐ ์์ ์ ์ฑ๋ฅ์ ํฌ๊ธฐํ๊ณ ์ฝ๊ธฐ ์์ ์ ์ฑ๋ฅ์ ์ป๊ณ ์ ํ๋ ๊ฒ์ด๋ผ๊ณ ๋ค์ ํ ๋ฒ ์๊ธฐํ๋ฉฐ ์ธ๋ฑ์ค์ ํค๊ฐ ์ถ๊ฐ๋ ๋๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
# ์ถ๊ฐ
๋ ์ฝ๋๊ฐ ์ถ๊ฐ๋์ด ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค B-Tree ์ ๋ ธ๋(์ธ๋ฑ์ค)๋ฅผ ์ถ๊ฐํ๋ ์ํฉ์ ๋๋ค.
1. ์ด ๋ ธ๋๋ฅผ B-Tree ์ด๋์ ์ ์ฅํ ์ง ํ์
2. ์ ์ ํ ์์น๋ฅผ ์ฐพ์์ ๋ฆฌํ๋ ธ๋์ ์ ์ฅํ ๋, ๋ฆฌํ๋ ธ๋๊ฐ ๊ฝ์ฐจ ์๋ค๋ฉด ๋ฆฌํ๋ ธ๋๋ฅผ ๋ถ๋ฆฌํ๋ ์์ ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ด ์๊ธฐ์ B-Tree ์ธ๋ฑ์ค์ ์ถ๊ฐ๋ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค.
๋ค๋ง, InnoDB ์คํ ๋ฆฌ์ง ์์ง(MySQL 8.0 ์ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง ์์ง)์ ์ด ์์ ์ ์ง์ฐ์์ผ ๋์ค์ ์ฒ๋ฆฌํ ์ ์์ง๋ง, PK ๋ ์ ๋ํฌ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ค๋ณต ์ฒดํฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฆ์ B-Tree ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํฉ๋๋ค.
Memory ์คํ ๋ฆฌ์ง ์์ง, MyISAM ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ ํ ์ด๋ธ์์๋ ์ฆ์ B-Tree ์ธ๋ฑ์ค์ ๋ฐ์ํฉ๋๋ค.
# ์ญ์
์ธ๋ฑ์ค ํค ์ญ์ ๋ ๋จ์ํ ํด๋น ํค๋ฅผ ์ฐพ์์ ์ญ์ ํฉ๋๋ค.
# ๋ณ๊ฒฝ
๋ค๋ง, ํค ๋ณ๊ฒฝ์ ๋จ์ํ ๊ฐ์ ๋ฎ์ด์์ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋จผ์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์์ ์ญ์ ํ ํ, ๋ค์ ์๋ก์ด ํค ๊ฐ์ ์ถ๊ฐํ๋ ํํ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ด๋ฌํ ์์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ ์ฐ๊ธฐ ์์ ์ ์ฑ๋ฅ์ ํฌ๊ธฐํ๊ณ , ์ ๋ ฌ๋ ์ํ์ ์ธ๋ฑ์ค๋ก ์กฐํ ์ฑ๋ฅ์ ๋์ด๊ฒ ๋ฉ๋๋ค.
# ๊ฒ์
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ SELECT ๊ตฌ๋ฌธ๋ฟ ์๋๋ผ UPDATE ์ DELETE ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ๋ ์ฌ์ฉ
- ํด๋น ์ฟผ๋ฆฌ๋ฌธ์๋ WHERE ๊ฐ ์์ต๋๋ค
- ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ column ์ ํค ๊ฐ์ ๋ท๋ถ๋ถ๋ง ๊ฒ์ํ๋ ์ฉ๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ex) SQL์ฟผ๋ฆฌ์์ WHERE ์ ์ 'Like %ํน๋ณ์' ๊ฐ์ด ์์ผ๋ ์นด๋ ์ฌ์ฉ
- column ์ ๊ฐ์ ๋ณํํด์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํฉ๋๋ค.
- B-Tree ์ธ๋ฑ์ค๋ ์ค์ column ์ ๊ฐ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ
- InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๊ฒ์์ ์ํํ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผํ ํ
์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ ๊ธ๋๋ค.
- ๊ทธ๋์, UPDATE ๋ DELETE ๋ฌธ์ฅ์ด ์คํ๋ ๋ ํ ์ด๋ธ์ ์ ์ ํ ์ฌ์ฉํ ์ ์๋ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ๋ถํ์ํ๊ฒ ๋ง์ ๋ ์ฝ๋๋ฅผ ์ ๊ธ๋๋ค.
8.3.3 B-Tree ์ธ๋ฑ์ค ์ฌ์ฉ์ ์ํฅ์ ๋ฏธ์น๋ ์์
# ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ํ์ด์ง ํฌ๊ธฐ์ ๊ธฐ๋ณธ๊ฐ์ 16KB ์ ๋๋ค.
์ธ๋ฑ์ค๋ ์ ์ฅ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค์ ํค ๊ฐ์ด ๋์ด๋๋ค๋ฉด ์์ฐ์ค๋ ํ๋์ ํ์ด์ง(16KB)์์ ์ฝ์ ์ ์๋ ์ธ๋ฑ์ค ๊ฐ์๊ฐ ์ ์ด์ง๋ฉฐ ์ด๋ ๋์คํฌ I/O ํ์๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
๊ทธ๋ฌ๋, ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค column ์ ํ์ ์ varchar ๋ blob ๊ฐ์ ๊ฑธ ํ์ง ๋ง์์ผ ํฉ๋๋ค.
# ์ ํ๋(๊ธฐ์์ฑ)
์ธ๋ฑ์ค์์ ์ค๋ณต๋์ง ์๋ ํค์ ๊ฐ์๋ฅผ ์๋ฏธํฉ๋๋ค.
์ค๋ณต๋์ง ์๋ ํค์ ๊ฐ์๊ฐ ๋ง์ ์๋ก ์ธ๋ฑ์ค ๊ฒ์ ๋์์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค.
# ์ฝ์ด์ผ ํ๋ ๋ ์ฝ๋์ ๊ฑด์
ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ผ ํ๋๋ฐ, ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ๋ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ๋ณด๋ค ๋ ๋น์ผ ๋น์ฉ์ธ ์์ ์ ๋๋ค.
๊ทธ๋์, ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผ ํ ๋ ์ฝ๋์ ๊ฑด์(์ตํฐ๋ง์ด์ ๊ฐ ์์ํ ๊ฑด์)๊ฐ ์ ์ฒด ํ ์ด๋ธ ๋ ์ฝ๋์ 20~25%๋ฅผ ๋์ด์๋ฉด ์ธ๋ฑ์ค๊ฐ ์๋๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ง ์๊ณ , ํ ์ด๋ธ์ ๋ชจ๋ ์ง์ ์ฝ์ด์ ํ์ํ ๋ ์ฝ๋๋ง ๊ฐ๋ ค๋ด๋ ํํฐ๋ง ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
8.3.4 B-Tree ์ธ๋ฑ์ค๋ฅผ ํตํ ๋ฐ์ดํฐ ์ฝ๊ธฐ
# ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
๊ฒ์ํด์ผ ํ ์ธ๋ฑ์ค์ ๋ฒ์๊ฐ ๊ฒฐ์ ๋์ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์
์์ํด์ผ ํ ๋ฆฌํ ๋ ธ๋ ์์น๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ๋๋ถํฐ ๋ฆฌํ ๋ ธ๋์ ๋ ์ฝ๋๋ง ์์๋๋ก ์ฝ๋๋ค.
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ์์ฐจI/O? ๋๋คI/O?
- ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๊ธฐ๋ฐํ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ์์ฐจ I/O ๋ผ ์๊ฐํฉ๋๋ค
- PK ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ์ฝ๋๊ฐ ์ ๋ ฌ๋์ด์๊ธฐ ๋๋ฌธ์ ๋ ์ธ์ง ์ค์บ์ด ์์ฐจ I/O ๋ผ ์๊ฐํฉ๋๋ค.
- ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค์ ๊ธฐ๋ฐํ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ๋๋ค I/O ๋ผ ์๊ฐํฉ๋๋ค.
- ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฝ์ด๋ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ PK ๊ธฐ๋ฐ์ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ํ ๋ฒ ๋ ํ์ํด์ผํ๊ณ , ์ด๋ ๋ ์ฝ๋์ ๋๋ค ์ ๊ทผ์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
# ์ธ๋ฑ์ค ํ ์ค์บ
์ธ๋ฑ์ค์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ์ฝ๋ ๋ฐฉ์์ผ๋ก ๋ํ์ ์ผ๋ก ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์นผ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ ์นผ๋ผ์ด ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํ ์ค์บ ๋ฐฉ์์ด ์ฌ์ฉ๋๋ค.
์ฟผ๋ฆฌ๊ฐ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ก ์ฒ๋ฆฌ๋ ์ ์์ ๋, ์ฃผ๋ก ์ด ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ค.
* ์ปค๋ฒ๋ง ์ธ๋ฑ์ค : ์ฟผ๋ฆฌ๋ก ์ฐพ๊ณ ์ ํ๋ ๋ ์ฝ๋๊ฐ ์ธ๋ฑ์ค ํ์ ๋ง์ผ๋ก ์ฐพ์ ์ ์๋ ์ธ๋ฑ์ค
# ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ
๋ฌ์ฑ๋ฌ์ฑํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฝ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ๊ณผ ๋น์ทํ๊ฒ ์๋ํ์ง๋ง ์ค๊ฐ์ ํ์์น ์์ ์ธ๋ฑ์ค ํค ๊ฐ์ ๋ฌด์ํ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ์ ์ฒ๋ฆฌ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก GROUP BY ๋๋ ์งํฉ ํจ์์ MAX(), MIN() ์ ๋ํด ์ต์ ํ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
ex) (dept_no, emp_no) ์กฐํฉ์ผ๋ก ์ธ๋ฑ์ค ์์ฑ ์, dept_no ์ d002 ์ปฌ๋ผ๋ค ์ค์์ ์ฒซ ๋ฒ์งธ๋ง ์ฝ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
SELECT dept_no, MIN(emp_no)
FROM dept_emp
WHERE dept_no BETWEEN 'd002' AND 'd004'
GROUP BY dept_no;
# ์ธ๋ฑ์ค ์คํต ์ค์บ
MySQL 8.0 ๋ถํฐ ๋์
๋ค์ 2๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ ๋, (gender, birth_date) ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํด๋ ์ธ๋ฑ์ค๋ฅผ ํ ์ ์๋ค.
- ์กฐ๊ฑด 2๊ฐ์ง
- WHERE ์กฐ๊ฑด ์ ์ ์กฐ๊ฑด์ด ์๋ ์ธ๋ฑ์ค์ ์ ํ ์นผ๋ผ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ ์ ์ด์ผ ํ๋ค.(์์์์ gender ์ ๊ฐ์ Female ๊ณผ Male ๋ ์ค 1๊ฐ์ด๋ค)
- ์ฟผ๋ฆฌ๊ฐ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํด์ผ ํ๋ค.
SELECT gender, birth_date
FROM employees
WHERE birth_date >= '1965-02-02';
'์คํฐ๋ > Real MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL ์ ๋ฐ์ดํฐ ํ์ ์ ๋ฆฌ (15.1 ~ 15.6) (0) | 2024.10.25 |
---|---|
MySQL ์์ง ์ํคํ ์ฒ & InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ํคํ ์ฒ ์ ๋ฆฌ (4.1 ~ 4.2) (2) | 2024.10.14 |