DevLog ๐ถ
[Real MySQL 8.0] ์ธ๋ฑ์ค์ B-Tree ์์๋ณด๊ธฐ ๋ณธ๋ฌธ
๐ฑ ๋์คํฌ ์ฝ๊ธฐ ๋ฐฉ์
๐ฌ HDD (ํ๋ ๋์คํฌ ๋๋ผ์ด๋ธ) / SSD (์๋ฆฌ๋ ์ค๋ ์ดํธ ๋๋ผ์ด๋ธ)
๋ฉ๋ชจ๋ฆฌ์ ๋นํด ์ค์ ํ๋์จ์ด ์ฅ์น์ ๋ฐ์ ์ ๋น๊ต์ ๋๋ฆฌ๊ฒ ๋ฐ์ ํ๋ค๋ ์๋ฆฌ๋ฅผ ๋ค์ ์ ์ด ์์ ๊ฒ์ด๋ค. ํนํ HHD๋ ํ๋ํฐ(์ํ)์ ๋๋ ค์ ์ฝ๊ณ ๋ ์ฐ๋ค ๋ณด๋ ์ฑ๋ฅ์ด ๋งค์ฐ ๋๋ฆด ์๋ฐ์ ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋ฑ์ฅํ SSD์ ๊ฒฝ์ฐ ๊ธฐ์กด ํ์คํฌ ๋๋ผ์ด๋ธ์์ ๋ฐ์ดํฐ ์ ์ฅ์ฉ ํ๋ํฐ(์ํ)์ ์ ๊ฑฐํ๊ณ ๊ทธ ๋์ ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฅ์ฐฉํด์ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค. ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์์ด ์์ด๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ง ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค๋ ๋๋ฆฌ์ง๋ง ๊ทธ๋๋ ํ๋ ๋์คํฌ ๋๋ผ์ด๋ธ๋ณด๋ค๋ ํจ์ฌ ๋น ๋ฅด๋ค.
๐ฌ ๋๋ค I/O์ ์์ฐจ I/O
๋์คํฌ ์ฝ๊ธฐ ์ฐ์ฐ์์ '๋๋ค I/O'์ '์์ฐจ I/O'๋ผ๋ ๋ง์ ๋ค์ ์ ์ด ์์ ๊ฒ์ด๋ค.
๋๋ค I/O๋ ์์ฐจ I/O ๋ชจ๋ ํ๋ ๋์คํฌ ๋๋ผ์ด๋ธ ํ๋ํผ(์ํ)์ ๋๋ ค์, ์ฝ์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น๋ก ๋์คํฌ ํค๋๋ฅผ ์ด๋์ํจ ๋ค์ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ด๋ค. ํ์ง๋ง, ์์ฐจ I/O์ ๊ฒฝ์ฐ 3๊ฐ์ ํ์ด์ง๋ฅผ ๊ธฐ๋กํ ๋ 1๋ฒ์ ์์คํ ์ฝ์ ์ฌ์ฉํ์ง๋ง, ๋๋ค I/O๋ 3๋ฒ์ ์์คํ ์ฝ์ ์์ฒญํ๋ค. ์ด๋, ๋๋ค I/O์ ๊ฒฝ์ฐ ์ฝ์ด์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ์ํ ์์น์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํค๋๋ฅผ ์ด๋์ํค๊ณ ์์คํ ์ฝ์ ํธ์ถํ์ง๋ง, ์์ฐจ I/O๋ ๊ทธ๋๋ก ์ฝ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ 1๋ฒ์ด๋ฉด ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์์ฐจ I/O๊ฐ ๋๋ค I/O๋ณด๋ค ์ฝ 3๋ฐฐ ๋น ๋ฅด๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ฌ๋ฌ ๋ฒ ์ฐ๊ธฐ๋ ์ฝ๊ธฐ๋ฅผ ํ๋ ๋๋ค I/O ์์ ์ด ๋ถํ๊ฐ ๋ ํฌ๋ค.
๐ก SSD์ ๊ฒฝ์ฐ ํ๋ํฐ๊ฐ ์์ด์ ๋ณ ์ฐจ์ด๊ฐ ์๋ค๊ณ ์๊ฐํ ์ ์๋ค.
ํ์ง๋ง, SSD์์๋ ์์ฐจ I/O์ ๋นํด ๋๋ค I/O์ throughout์ ๋จ์ด์ง๋ค๊ณ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋์คํฌ์ ์ฑ๋ฅ์ ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๊ธฐ๋กํ๋๋์ ์ํด์ ๊ฒฐ์ ๋๋ค.
๋๋ค I/O์ ์์ฐจ I/O ๋ชจ๋ ํ์ผ ์ฐ๊ธฐ ์คํ ์ ๋๊ธฐํ ์์
(flush or fsync) ์์
์ด ํ์ํ๋ฐ, ์์ฐจ I/O์ ๊ฒฝ์ฐ ๋๊ธฐํ ์์
์ด ๋๋ฌด ๋น๋ฒํ๋ฉด ๋๋ค I/O์ฒ๋ผ ๋นํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด์ ๋ณดํต RAID ์ปจํธ๋กค๋ฌ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฝ์ฐ ํจ์จ์ ์ผ๋ก ์์ฐจ I/O๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๊ธฐ๋ ํ๋ค.
๋ณดํต ์ฟผ๋ฆฌ๋ฅผ ํ๋ํ๋ค๋ ๊ฒ์ ๋๋ค I/O๋ฅผ ์ด๋ป๊ฒ ์ค์ด๋ ๊ฒ์ธ์ง๊ฐ ํฌ์ธํธ์ด๋ค.
๋ฐ์์ ๋ค๋ฃจ๊ฒ ์ง๋ง, ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ๋๋ค I/O๋ฅผ ์ฌ์ฉํ๊ณ ํ ํ ์ด๋ธ ์ค์บ์ ์์ฐจ I/O๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์คํ๋ ค ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๊ต์ฅํ ๋ง๊ณ ํด๋น ๋ฐ์ดํฐ์ ๋๋ถ๋ถ์ ์กฐํํ๋ ๊ฒฝ์ฐ์๋ ์ผ๋ถ๋ฌ ํ ํ ์ด๋ธ ์ค์บ์ ์ฌ์ฉํ์ฌ ์ญ์ผ๋ก ์์ฐจ I/O๋ฅผ ํตํด ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค. ์์ฐจ I/O์ ๊ฒฝ์ฐ ๋ ๋น ๋ฅด๊ณ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ด์ OLTP (On-Line Transaction Processing) ์ฑ๊ฒฉ์ ์๋น์ค๋ณด๋ค ํต๊ณ ์์ ์์ ์์ฃผ ์ฌ์ฉ๋๊ณ ํ๋ค.
- ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ํ์ฉํด์ ๋ ์ธ์ง ์ค์บ์ ํ๊ฒ ๋๋ฉด, ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ์ฟผ๋ฆฌ ์์น๊ฐ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ "๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์กฐํํ๋ค๋ฉด" ๋๋ค I/O๊ฐ ์๋ ์์ฐจ I/O๋ฅผ ์งํํ๊ฒ ๋๋ค. ๋ฌผ๋ก , ์์๋๋ก๊ฐ ์๋ ์ค๊ฐ์ค๊ฐ ๋ช ๊ฐ์ฉ๋ง ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค๋ฉด ๋๋ค I/O๋ฅผ ์งํํ๊ฒ ๋ ๊ฒ์ด๋ค.
- ๋ฐ๋๋ก, ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ณ , ๋ฌผ๋ฆฌ์ ์ธ ์์น๊ฐ ์ ๋ ฌ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ถ์ฐ์ด ๋์ด ์์ ๊ฒ์ด๋ค. ๊ทธ๋์ ์์ฐจ I/O์ ๋นํด์ ๋๋ค I/O๋ฅผ ์ฌ์ฉํ์ฌ ๋์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
๐ฑ ์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ ์ปฌ๋ผ์ ๊ฐ๊ณผ ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ key-value๋ก ์ผ์ ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋, ์ปฌ๋ผ์ ๊ฐ์ ์ฃผ์ด์ง ์์๋๋ก ๋ฏธ๋ฆฌ ์ ๋ ฌํด์ ๋ณด๊ดํ๋ฉฐ, ์ธ๋ฑ์ค๊ฐ ๋ง์ ํ ์ด๋ธ์ CUD ์์ ์ ๋๋ฆฌ์ง๋ง, R์์ ๋ ๋ณด์ ์ธ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
๐ฑ ํ๋ผ์ด๋จธ๋ฆฌ ์ธ๋ฑ์ค์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค
ํ๋ผ์ด๋จธ๋ฆฌ ์ธ๋ฑ์ค๋ ๋ ์ฝ๋๋ฅผ ๋ํํ๋ ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ธ๋ฑ์ค๋ก, ํ ์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ ์๋ณํ ์ ์๋ ๊ธฐ์ค๊ฐ์ ์ฌ์ฉํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก NULL๊ณผ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. ๋ฐ๋๋ก ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ PK๋ฅผ ์ ์ธํ ๋๋จธ์ง ํ๋๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์์ ๋ ์์ฑ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ ๋ํฌ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ๋์ฒด ํค๋ผ๊ณ ๋ ํ๋๋ฐ, ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ก ๋ณผ ๋๋ ์๊ณ ๊ทธ๋ฅ ์์ ๋ณ๋๋ก ๋ถ๋ฆฌํ ๋๋ ์์ด์ ์์๋ง ๋์.
๐ฑ B-Tree ์ธ๋ฑ์ค (Balanced Tree)
์ธ๋ฑ์ค ๊ตฌ์กฐ ์ค์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํ์ ์ B-Tree์ด๋ค. (AVL ๋ฑ ๋ค๋ฅธ ๊ตฌ์กฐ๋ ์์ง๋ง, B-Tree๊ฐ ๋ธ๋ก ๋จ์๋ก ๋ฐ์ดํฐ์ ๋ํ I/O ์์ ์ ์งํํ ๋ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.) ์ธ๋ฑ์ค๋ ํ์ด์ง ๋จ์๋ก ์ ์ฅ๋๋ฉฐ, ์ธ๋ฑ์ค ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
์ผ์ชฝ์ ์๋ ๋ถ๋ถ์ด B-Tree ์ธ๋ฑ์ค๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ณ (๋ฃจํธ ๋ ธ๋ ์๋ต), ์ค๋ฅธ์ชฝ์ด ํ๋ผ์ด๋จธ๋ฆฌ ํค ์ธ๋ฑ์ค์ด๋ค. (= ํด๋ฌ์คํฐ ์ธ๋ฑ์ค)
์ต์์๋ ๋ฃจํธ ๋ ธ๋, ์ค๊ฐ์ ๋ธ๋์น ๋ ธ๋, ๊ฐ์ฅ ํ์๋ ๋ฆฌํ ๋ ธ๋๋ผ๊ณ ๋งํ๋๋ฐ, ๋ฃจํธ์ ๋ธ๋์น๋ ๋ณธ์ธ์ ํ์ ์์ ๋ ธ๋์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ฆฌํ ๋ ธ๋์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํ์ผ์ ์ ์ฅ๋ ๋ ์ฝ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ํ, ์ธ๋ฑ์ค์ ํค ๊ฐ์ ํญ์ ์ ๋ ฌ๋์ด ์์ง๋ง ๋ฐ์ดํฐ ํ์ผ์ ๋ ์ฝ๋๋ ์ ๋ ฌ์ด ๋์ด ์์ง ์์์ ์ผ๋ฐ์ ์ธ DBMS์์๋ INSERT ์์๋ก ์ ์ฅํ๋ ๊ฒ์ด ์๋ ์ค๊ฐ์ DELETE๋ก ์ธํด ๋น์ด์๋ ๊ณต๊ฐ์ด ์๊ธฐ๋ฉด ํด๋น ์์น์ ์ฝ์ ์ด ์งํ๋๋ค. (์ฆ, ์์์ ์์) ํ์ง๋ง, ํน๋ณํ๊ฒ innoDB์ ๊ฒฝ์ฐ ๋ ์ฝ๋๊ฐ ํด๋ฌ์คํฐ๋๊ธฐ ๋๋ฌธ์ PK ์์๋๋ก ์ ๋ ฌ๋์ด ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ PK ์์ฒด๊ฐ ROWID (์ค์ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์) ์ญํ ์ ํ๋ฉฐ, ์ด๋ก ์ธํด PK๊ฐ '๋ ผ๋ฆฌ์ ์ธ ์ฃผ์'๋ฅผ ๊ฐ์ง๋ค๊ณ ๋งํ๋ค. (myISAM์์๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๊ฐ ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์๋ฅผ ๊ฐ์ง)
๊ทธ๋์ innoDB ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ ๋ฐ๋ก ๋ฐ์ดํฐ ํ์ผ์ ์ฐพ์ ์ ์์ผ๋ฉฐ, ์ธ๋ฑ์ค ์์ญ์ ์ ์ฅ๋ PK๋ฅผ ํตํด PK ์ธ๋ฑ์ค๋ฅผ ํ ๋ฒ ๋ ๊ฒ์ํ ๋ค์, PK ์ธ๋ฑ์ค์ ๋ฆฌํ ํ์ด์ง์ ์ ์ฅ๋ ๋ ์ฝ๋๋ฅผ ์ฝ๋๋ค. ์ฆ, ๋ชจ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค ๊ฒ์์์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฝ์ผ๋ ค๋ฉด PK๋ฅผ ์ ์ฅํ๊ณ ์๋ B-Tree๋ฅผ ๋ค์ ๊ฒ์ํด์ผ ํ๋ค.
์ฐธ๊ณ ๋ก, ๊ธฐ๋ณธ์ ์ผ๋ก PK๋ก ๋ ์ฝ๋๋ฅผ ์กฐํํ ๋ ๋ฐ์ดํฐ ํ์ผ์ ์ ๋ ฌ๋์ด ์์ง ์์์ PK ์์ฒด๊ฐ ์ด๋ ํ์ด์ง์ ์ ์ฅ๋์ด ์๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค I/O ๋ฐ์ ํ, ํด๋น PK ๊ฐ์ ๋ฐ๋ผ๊ฐ์ ๋ฆฌํ ๋ ธ๋์ ์ ์ฅ๋ ์ค์ ๋ ์ฝ๋๋ฅผ ๋ฐ์์ค๊ฒ ๋๋ ๊ฒ์ด๋ค.
๐ฑ B-Tree ์ธ๋ฑ์ค ํค ์ถ๊ฐ
B-tree์ ์๋ก์ด ํค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ์ ์ฅ๋ ์์น๋ฅผ ๊ฒฐ์ ํ ๋ค์, ๋ ์ฝ๋์ ํค ๊ฐ๊ณผ ๋์ ๋ ์ฝ๋์ ์ฃผ์ ์ ๋ณด๋ฅผ B-Tree์ ์ธ๋ฑ์ค์ ์ ์ฅํ๋ค. ๋ง์ฝ, ๋ฆฌํ ๋ ธ๋๊ฐ ๊ฝ์ฐจ๋ฉด ํด๋น ๋ ธ๋๋ฅผ ๋ถ๋ฆฌํ๋๋ฐ, ์ด๋ ์์ ๋ธ๋์น ๋ ธ๋๊น์ง ์ฒ๋ฆฌ ๋ฒ์๊ฐ ๋์ด์ ธ์ ์๋ก์ด ํค๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ (๋ถ๋ชจ๋ก ์น๊ฒฉํ๋ ๊ฒ) ํด๋น ์ฐ์ฐ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด๋ค.
๋ณดํต ๋ ์ฝ๋ ์ถ๊ฐ ์์
์ด 1์ด๋ผ๋ฉด ํ
์ด๋ธ์ ์ธ๋ฑ์ค์ ํค๋ฅผ ์ถ๊ฐํ๋ ๋น์ฉ์ 1.5 ์ ๋๋ก ์ธก์ ํ๋ฉฐ, ์๋ฅผ ๋ค์ด ์ธ๋ฑ์ค๊ฐ 3๊ฐ๋ผ๋ฉด 1.5 * 3 + 1 = 5.5 ์ ๋๋ฅผ ๋น์ฉ์ผ๋ก ์๊ฐํ๋ค. innoDB์์๋ ์ฒด์ธ์ง ๋ฒํผ๋ฅผ ํ์ฉํ์ฌ ์ธ๋ฑ์ค ํค๋ฅผ ์ถ๊ฐํ๋ ์์
์ ์ง์ฐ์ํฌ ์ ์์ง๋ง, PK, UK ๊ฐ์ด ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด์ด ๊ฑธ๋ ค์์ ๊ฒฝ์ฐ ์ค๋ณต ์ฒดํฌ๋ฅผ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฆ์ B-Tree์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ์์
์ ์งํํ๋ค.
๐ก ์ฒด์ธ์ง ๋ฒํผ
์ฒด์ธ์ง ๋ฒํผ๋ ํน์ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์์ ๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค ํ์ด์ง์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์บ์ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค,
์ธ๋ฑ์ค ์ฝ์ / ์ ๋ฐ์ดํธ ์ ๋์คํฌ์ ๋ํ ๋๋ค I/O ์ฐ์ฐ์ด ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ด ํ์ํ ์ธ๋ฑ์ค ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์์ผ๋ฉด ๋ฐ๋ก ์ ๋ฐ์ดํธ๋ฅผ ํ๊ณ , ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์์ผ ํ๋ค๋ฉด ์ธ์ํธ ๋ฒํผ์ ์ ์ฅํ๋ค๊ฐ ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋ฐํํ๋๋ก ์ต์ ํํ๋ค.
- ์ง์ฐ๋ ์์ ์ ์ถํ ๋ค๋ฅธ ์ฝ๊ธฐ ์์ ์ ํตํด ๋ฒํผ ํ์์ ํ์ด์ง ๋ก๋ ์ merge
- ์ฌ์ฉ์ ์ฟผ๋ฆฌ ์คํ -> ๋ฒํผ ํ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ํ์ด์ง (B-Tree์ ๋ฆฌํ ๋ ธ๋) ์๋ค๋ฉด ์ฆ์ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์ -> ๋ฒํผ ํ์ ํ์ด์ง ์์ผ๋ฉด ์ธ์ํธ ๋ฒํผ์ ์์๋ก ๊ธฐ๋กํด๋๊ณ ์ฟผ๋ฆฌ ์คํ ์๋ฃ -> ์ถํ ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ์ฝ์ ๋๋ง๋ค ์ธ์ํธ ๋ฒํผ์์ ๋จธ์งํด์ผ ํ๋ ํค๊ฐ์ ํ์ธํ ๋ค์ ๋ณํฉ (B-Tree ์ธ๋ฑ์ค ๋ฐ์)
๐ฑ B-Tree ์ธ๋ฑ์ค ํค ์ญ์
์ธ๋ฑ์ค ํค ์ญ์ ์ ์ญ์ ํ ํค ๊ฐ์ด ์ ์ฅ๋ B-Tree์ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ์์ ์ญ์ ๋งํน ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค. ๋งํน๋ ๊ณต๊ฐ์ ๋ฐฉ์นํ ์๋ ์๊ณ , ์ฌํ์ฉํ ์๋ ์๋๋ฐ ๋งํน ์์ ์ญ์ ๋์คํฌ I/O ์์ ์ด ํ์ํด์ ๋น์ฉ์ด ํฌ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก MySQL 5.5 ์ด์๋ถํฐ๋ ์ธ๋ฑ์ค ์ถ๊ฐ์ฒ๋ผ ์ง์ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ฑ B-Tree ์ธ๋ฑ์ค ํค ๋ณ๊ฒฝ
์ธ๋ฑ์ค ํค ๊ฐ์ ํด๋น ๊ฐ์ ๋ฐ๋ผ ์ ์ฅ๋ ๋ฆฌํ ๋ ธ๋์ ์์น๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์, B-Tree์ ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ธ๋ฑ์ค์ ํค ๊ฐ๋ง ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ๋ณดํต ๋จผ์ ํค ๊ฐ์ ์ญ์ ํ ๋ค ์๋ก์ด ํค ๊ฐ์ ์ถ๊ฐํ๋ค. ๋ณ๊ฒฝ ์ญ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ง์ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ฑ B-Tree ์ธ๋ฑ์ค ํค ๊ฒ์
๊ธฐ๋ณธ์ ์ผ๋ก ํค ํ์ ์ ‘ํธ๋ฆฌ ํ์’ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์กฐํํ๋ค.
100% ๊ฐ์ด ์ผ์นํ๋์ง ์ฐพ๋ equality ๋น๊ต๋ ๋ถ๋ฑํธ ๋น๊ต ์กฐ๊ฑด, ํน์ like์์ ์๋ถ๋ถ๋ง ์ผ์นํ๋ ๊ฒฝ์ฐ (like%)์ ๋ํด์ ์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ฆฐ ํ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ์ง๋ง, ์ธ๋ฑ์ค ๊ฐ์ ๋ณํํ ๋ค์์ ์ฌ์ฉํ๋ค๋ฉด ๋น ๋ฅธ ๊ฒ์์ ํ์ฉํ ์ ์๋ค.
๋ํ, innoDB ํ ์ด๋ธ์ ๊ฒฝ์ฐ ๊ฒ์ ์ ๋ฅ์คํธ ํค ๋ฝ์ด๋ ๋ ์ฝ๋ ๋ฝ์ ํตํด์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทธ๊ณ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๊ธฐ ๋๋ฌธ์, UPDATE / DELETE ์ ํ ์ด๋ธ์ ์ฌ์ฉํ ๋งํ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ๋ถํ์ํ๊ฒ ๋ง์ ๋ ์ฝ๋๋ฅผ ์ ๊ธ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ์ค๊ณ๋ฅผ ์ํด์ผ ํ๋ค. (ํ ์ด๋ธ ์ ์ฒด์ ๋ฝ์ด ๊ฑธ๋ฆด ์๋ ์์ผ๋ ์ฃผ์ํด์ผ ํจ)
๐ฑ B-Tree ์ธ๋ฑ์ค ์ฌ์ฉ ์ ๊ณ ๋ คํ ์์
B-Tree์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ปฌ๋ผ์ ํฌ๊ธฐ์ ๋ ์ฝ๋ ๊ฑด์, ์ ๋ํฌํ ์ธ๋ฑ์ค ํค ๊ฐ์ ๊ฐ์ ๋ฑ์ ์ ์ค์ ํด์ผ ํ๋ค.
๐ฌ ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ
innoDB์ ๋ฐ์ดํฐ ์ ์ฅ ์ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋จ์๋ฅผ ํ์ด์ง or ๋ธ๋ก์ด๋ผ๊ณ ํ๋ค. (๋ฒํผ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋จ์์ด๊ธฐ๋ ํ๋ค) ์ด๋, ์ธ๋ฑ์ค ์ญ์ ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌ๋๋ฉฐ, ๋ฃจํธ, ๋ธ๋์น, ๋ฆฌํ ๋ ธ๋๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ด ‘ํ์ด์ง’์ด๋ค. (๊ธฐ๋ณธ์ 16KB)
์ผ๋ฐ์ ์ผ๋ก B-Tree ๊ตฌ์กฐ์์ ์์ ๋ ธ๋์ ๊ฐ์๋ ๊ฐ๋ณ์ ์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค์ ํ์ด์ง ํฌ๊ธฐ์ ํค ๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ์ ๊ฒฐ์ ๋๋ค.
์ ๊ทธ๋ฆผ์ ๊ธฐ์ค์ผ๋ก ํ๋ฉด ํ๋์ ์ธ๋ฑ์ค ํ์ด์ง์ ์ด 16*1024/(16+12) = 585๊ฐ์ ํค๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ์์ ๋
ธ๋๋ฅผ 585๊ฐ ๊ฐ์ง ์ ์๋ B-Tree๊ฐ ๋๋ค. (ํ์ฌ ํค ๊ฐ์ 16๋ฐ์ดํธ) ํ์ง๋ง, ์ธ๋ฑ์ค ํค ๊ฐ์ด 32๋ฐ์ดํธ๋ก ๋์ด๋๋ค๋ฉด 16*1024/(32+12) = 372๊ฐ๊ฐ ์ ์ฅ๋๋ฉฐ, ๋ง์ฝ ํ ๋ฒ SELECT ์ 500๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ ํ๋ค๋ฉด ๋ ๋ฒ์งธ ๊ฒฝ์ฐ๋ ๋์คํฌ๋ฅผ 2๋ฒ ์ฝ์ด์ผ ํด์ ๋ ๋๋ ค์ง๊ฒ ๋๋ค.
๐ก ์ฆ, ์ธ๋ฑ์ค ํค ๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์ ์ฒด์ ์ธ ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ ์ปค์ง๊ธฐ ๋๋ฌธ์, ์ ํ๋ ํฌ๊ธฐ์ ๋ฒํผ ํ์์ ํ๋์ ๋ ์ฝ๋๋ฅผ ์ํ ์ธ๋ฑ์ค ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ ์ ์๋ ๋ ์ฝ๋์ ์๊ฐ ์ค์ด๋ค์ด ๊ฒฐ๊ตญ ํจ์จ์ฑ ์ญ์ ๋จ์ด์ง๊ฒ ๋๋ค.
๐ฌ B-Tree ๊น์ด
B-Tree์ ๊น์ด๋ ์ง์ ์ ์ด๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ๋ง์ฝ B-Tree์ ๊น์ด๊ฐ 3์ด๋ผ๊ณ ๊ฐ์ ํ๋ค๋ฉด ์์ ์์ ์์ ์ต๋ 2์ต (585^3)์ ๊ฐ์ง์ง๋ง, ์ธ๋ฑ์ค ํค ๊ฐ์ด 32๋ฐ์ดํธ๋ผ๋ฉด ์ต๋ 5์ฒ๋ง (372^3)์ด๋ผ์ ์ค์ด๋ค๊ณ , ๊ฒฐ๊ตญ ๋์คํฌ ์ ๊ทผ ํ์๊ฐ ๋ ๋์ด๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ค. ์ฌ๋งํ๋ฉด ๊น์ด๋ ์๊ฒ ๋ง๋ค์.
๐ฌ ์ ํ๋(Selectivity) = ๊ธฐ์์ฑ(Cardinality)
์ ํ๋๋ ๋ชจ๋ ์ธ๋ฑ์ค ํค ๊ฐ์ค ์ ๋ํฌํ ๊ฐ์ ์๋ฅผ ์๋ฏธํ๋ค. ๋ง์ฝ ํ ์ด๋ธ์ ๋ ์ฝ๋์์ ์ค๋ณต๊ฐ์ด ๋ง์์ก๋ค๋ฉด ๊ธฐ์์ฑ์ด ๋ฎ๋ค๊ณ ๋ณผ ์ ์๊ณ , ๊ธฐ์์ฑ์ด ๋ฎ์ผ๋ฉด ๊ฒ์ํด์ผ ํ๋ ๋์์ด ๋ง์์ ธ์ ์๋๊ฐ ๋๋ ค์ง๊ฒ ๋๋ค.
ex) ์ ์ฒด ๋ ์ฝ๋ ์๋ 10000๊ฐ์ผ ๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ์ผ์นํ๋ ๋ ์ฝ๋๊ฐ 1๊ฐ๋ผ๋ฉด?
์ด๋, ํน์ ์ปฌ๋ผ A์ ๋ํด ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ 10๊ฐ๋ผ๋ฉด 9๊ฐ๋ฅผ ๋ ์ฝ๊ฒ ๋๋ ๊ฒ์ด๊ณ , ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ 1000๊ฐ๋ผ๋ฉด 999๊ฐ๋ฅผ ๋ ์ฝ์ ๊ฒ์ด ๋๋ค. ์ฆ, ํ์์ ๊ฒฝ์ฐ๊ฐ ๋นํจ์จ์ ์ธ ๋ฐฉ์์ด ๋๋ค.
ํ์ง๋ง, A ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์๋ค๋ฉด ์ธ๋ฑ์ค๋ ์ปฌ๋ผ์ ๋ํด์ ์ ์ฒด ๋ ์ฝ๋์ ๊ฐ์๋ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ ๋ฑ์ ํต๊ณ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (์ธ๋ฑ์ค๋ณ๋ก ํ๊ท ๋ช ๊ฐ์ ๋ ์ฝ๋๊ฐ ์๋์ง ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋ ๊ฒ) ์ด๋ ์ ์์ ๊ฒฝ์ฐ 10000 / 10 = 1000๊ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ๊ฒ ๋์ด, 1๊ฐ๋ง ์ผ์นํ๋ค๋ฉด 999๊ฐ๊ฐ ๋ญ๋น๋๋ค. ๋ฐ๋ฉด, ํ์์ ๊ฒฝ์ฐ 10000 / 1000 = 10๊ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ๊ฒ ๋์ด, 9๊ฐ๊ฐ ๋ญ๋น๋๊ธฐ ๋๋ฌธ์, ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ์คํ๋ ค ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ ๋ง์์๋ก ๋ ํจ์จ์ ์ด๋ค.
๐ฑ ๋ฐ์ดํฐ๋ฅผ ๋ช ๊ฐ๋ ์ฝ์ด์์ผ ํ ๊น?
์ผ๋ฐ์ ์ธ DBMS์ ์ตํฐ๋ง์ด์ ๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ ์ฝ๋ 1๊ฑด์ ์ฝ๋ ๊ฒ ์ง์ ๋ ์ฝ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ๋ณด๋ค 4~5๋ฐฐ ์ ๋ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค๊ณ ์์ธกํ๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ ๋ ์ฝ๋์ ๊ฐ์๊ฐ ์ ์ฒด ํ ์ด๋ธ ๋ ์ฝ๋์ 20~25%๋ฅผ ๋๋๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ทธ๋ฅ ํํ ์ด๋ธ ์ค์บ + ํํฐ๋ง์ด ๋ ํจ์จ์ ์ด๋ค.
๐ฌ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
๊ฒ์ํด์ผ ํ ์ธ๋ฑ์ค์ ๋ฒ์๊ฐ ๊ฒฐ์ ๋์ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฃจํธ ๋ ธ๋๋ถํฐ ๋น๊ต๋ฅผ ์์ํด์ ๋ธ๋์น ๋ ธ๋๋ฅผ ๊ฑฐ์น๊ณ , ์ต์ข ์ ์ผ๋ก ๋ฆฌํ ๋ ธ๋๊น์ง ์ฐพ์ ๋ค์ด๊ฐ์ผ ํ์ํ ๋ ์ฝ๋์ ์์ ์ง์ ์ ์ฐพ์ ์ ์๋ค. ์์ ์ง์ ์ ์ฐพ์ ์ดํ, ๋ฆฌํ ๋ ธ๋์ ๋ฐ์ดํฐ๋ง ์์๋๋ก ์ฝ์ผ๋ฉฐ, ํ๋์ ๋ฆฌํ ๋ ธ๋๋ฅผ ๋ค ์ฝ์ผ๋ฉด ๋ค์ ๋ฆฌํ ๋ ธ๋๋ก ์ด๋ํด์ ๋ ๋ค์ ์ค์บํ๋ค. ์ด๋, ์ธ๋ฑ์ค์ ํน์ฑ์ผ๋ก ์ธํด ์ค๋ฆ์ฐจ์ / ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์กฐ๊ฑด์ ๋ค ์ฐพ์ผ๋ฉด ๋ฐํ ํ ์ฟผ๋ฆฌ๋ฅผ ์ข ๋ฃํ๋ค.
SELECT * FROM crew WHERE name BETWEEN Ice AND Journey
๋ฆฌํ ๋ ธ๋ 5๋ฒ ํ์ด์ง์ ๋๋ฌํ๊ธฐ ์ํด์ ๋ฃจํธ ๋ ธ๋, ๋ธ๋์น ๋ ธ๋์์ ์ฐพ์๋ค์ด๊ฐ๋ค. ์ดํ ์ฐพ์ ๋ค์์๋ ์ญ ๋ ์ธ์ง ์ค์บ์ ์งํํ๋ฉฐ ‘Journey’ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋๊น์ง ์ญ ์ค์บํ๋ค๊ฐ ์ฐพ์ผ๋ฉด ๋ฐํํ๊ฒ ๋๋ค.
๋จ, ์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ธ๋์์ ๊ฒ์ ์กฐ๊ฑด์ ์ผ์นํ๋ ๊ฒ๋ค์ ๋ ์ฝ๋ ์ฃผ์ ๊ฐ์ ๋ฐํ์ผ๋ก, ๋ฐ์ดํฐ ํ์ผ๋ก๋ถํฐ ์ฝ์ด์์ผ ํ๊ธฐ ๋๋ฌธ์ (์ผ์นํ๋ ๊ฐ์๋งํผ ๋์คํฌ์์ ์ฒ๋ฆฌํด์ผ ํจ) ๋๋ค I/O ์์ ์ด ๋ฐ์ํ์ฌ ๋น์ฉ์ด ์๋นํ ํฌ๋ค.
๐ก ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ ๊ณผ์
1. ์ธ๋ฑ์ค์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ด ์ ์ฅ๋ ์์น๋ฅผ ์ฐพ๋๋ค. (index seek)
2. ํ์๋ ์์น๋ก๋ถํฐ ํ์ํ ๋งํผ ์ธ๋ฑ์ค๋ฅผ ์ฝ์ด๋๊ฐ๋ค. (index scan)
3. ์ฝ์ ์ธ๋ฑ์ค ํค์ ๋ ์ฝ๋ ์ฃผ์๋ฅผ ํตํด ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ ์ฅ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์จ๋ค. (๋๋ค I/O)
- ๋ง์ฝ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋์คํฌ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค ์ฝ๊ธฐ๊ฐ ์ค์ด๋ค๊ณ ์ฑ๋ฅ์ด ๋นจ๋ผ์ง๋ค.
์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ธ๋ฑ์ค๋ก, where, order by, group by ๋ฑ ์กฐ๊ฑด์ ์ ๋ํด์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค ์ปฌ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค.
- index seek, index scan ๊ณผ์ ์ mySQL์์ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ก ์ ์ ์๋ค.
SHOW STATUS LIKE 'handler_%';
- handler_read_key: index seek๊ฐ ์คํ๋ ํ์
- handler_read_next, handler_read_prev: index scan์์ ์ฝ์ ๋ ์ฝ๋ ๊ฐ์
handler_read_next: ์ธ๋ฑ์ค ์ ์์ผ๋ก ์ฝ์ ๋ ์ฝ๋ ๊ฐ์ / handler_read_prev: ์ธ๋ฑ์ค ์ญ์์ผ๋ก ์ฝ์ ๋ ์ฝ๋ ๊ฐ์
- handler_read_first, handler_read_last: ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ, ๋ง์ง๋ง ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ์
๋ณดํต MIN(), MAX() ๊ฐ์ด ๊ฐ์ด ๊ฐ์ฅ ์๊ฑฐ๋ ํฐ ๊ฐ์ ์ฝ์ ๋๋ง ์ฆ๊ฐํ๋ค.
์ฐธ๊ณ - ์ฌ๊ธฐ์ ๋ชจ๋ ์ธ๋ฑ์ค๋ง ์ฝ์๋์ง, ์ธ๋ฑ์ค๋ก ํ ์ด๋ธ์ ๋ ์ฝ๋๋ง ์ฝ์๋์ง๋ ๊ตฌ๋ถํ์ง ์๋๋ค.
๐ฌ ์ธ๋ฑ์ค ํ ์ค์บ
์ธ๋ฑ์ค์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ์ฝ๋ ๋ฐฉ์์ผ๋ก, ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ด ์๋๋ผ๋ฉด ๋ณดํต ์ธ๋ฑ์ค ํ ์ค์บ์ด ๋ฐ์ํ๋ค.
ex) ์ธ๋ฑ์ค๊ฐ A, B, C ์์์ง๋ง ์ฟผ๋ฆฌ์์๋ B, C ์ปฌ๋ผ์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ
์ธ๋ฑ์ค ๋ฆฌํ ๋
ธ๋์ ์ ์ผ ์, ๋ค๋ก ์ด๋ํ ๋ค์, ์ฒ์๋ถํฐ ๋๊น์ง ์ค์บํ๋ค.
๋ฌผ๋ก , ์ธ๋ฑ์ค๊ฐ ํ
์ด๋ธ ํฌ๊ธฐ๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ํ
์ด๋ธ ํ ์ค์บ์ ๋นํด์๋ ์ข ๋ ํจ์จ์ ์ด๋ค.
- ๋น์ฐํ ์ฟผ๋ฆฌ์์ ํ์ํ ์ปฌ๋ผ๋ค์ด ์ธ๋ฑ์ค์ ์กด์ฌํด์ผ ํ
์ด๋ธ ์ค์บ์ด ์ ์ผ์ด๋๋ค. (๋ค๋ฅธ ์ปฌ๋ผ๊น์ง ํ์ํ๋ค๋ฉด ํ
์ด๋ธ ์ค์บ ๋ฐ์)
๐ฌ ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ
๋ ์ธ์ง ์ค์บ์ด๋ ๋น์ทํ์ง๋ง, ์ค๊ฐ์ ํ์ํ์ง ์์ ์ธ๋ฑ์ค ํค๋ ๋ฌด์ํ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ ๋ฐฉ์์ด๋ค. GROUP BY, MIN(), MAX()์ ๋ํด ์ต์ ํ๋ฅผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
SELECT name, MIN(age)
FROM crew
WHERE id BETWEEN 1 AND 100
GROUP BY id;
crew ํ
์ด๋ธ์ (id, age)๋ก ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด ์๊ณ , ์ ๋ ฌ๊น์ง ๋์ด ์๋ ์ํ๋ผ๊ณ ๊ฐ์ ํด๋ณด์.
๊ทธ๋ ๋ค๋ฉด ์์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ๋ id ๊ทธ๋ฃน๋ณ๋ก ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋์ age ๊ฐ๋ง ์ฝ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๋ ์ฝ๋๋ ๋ฌด์ํ๊ณ ์ค์บ์ ์งํํ๋ค.
๐ฌ ์ธ๋ฑ์ค ์คํต ์ค์บ
ALTER TABLE crew ADD INDEX idx_gender_birth (gender, birth);
crew ํ
์ด๋ธ์ ์์ ๊ฐ์ด ์ฑ๋ณ๊ณผ ์์ผ ์ ๋ณด๋ฅผ ๊ฐ์ง ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด๋ณด์.
์ด๋, ์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ gender์ ๋ํ ์กฐ๊ฑด์ด ๊ผญ ๋ค์ด๊ฐ์ผ ํ์๋ค.
ํ์ง๋ง, MySQL 8.0๋ถํฐ๋ birth ์ปฌ๋ผ์ผ๋ก๋ ์ธ๋ฑ์ค ๊ฒ์์ด ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ‘์ธ๋ฑ์ค ์คํต ์ค์บ’ ์ต์ ํ ๊ธฐ๋ฅ์ด ๋์
๋์๋ค!
- explain์ผ๋ก ์คํ ๊ณํ์ ๋ณด๋ฉด type์ range๋ผ๊ณ ๋ ์์ ๊ฒ์ด๋ค.
- gender ์ปฌ๋ผ์์ ์ ๋ํฌํ ๊ฐ์ ๋ค ์กฐํํ ๋ค์, ์ฟผ๋ฆฌ์ gender ์ปฌ๋ผ์ ๋ด๋ถ์ ์ผ๋ก ์์์ ์ถ๊ฐํด์ ๋ค์ ์คํํ๋ ํํ๋ก ์ฒ๋ฆฌ๋๋ค.
SELECT gender, birth FROM crew WHERE birth >= '2001-03-12'
# ๋ด๋ถ์ ์ผ๋ก ์๋์ ๊ฐ์ด ์ฟผ๋ฆฌ ์์ฑ ํ ์ต์ ํ
SELECT gender, birth FROM crew WHERE birth >= '2001-03-12' AND gender = 'W'
SELECT gender, birth FROM crew WHERE birth >= '2001-03-12' AND gender = 'M'
enum ๊ฐ์ด ์๋๋๋ผ๋ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฐ์ ๋จผ์ ์ถ์ถํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ธ๋ฑ์ค ์คํต ์ค์บ์ ์งํํ๋ค.
ํ์ง๋ง, ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ‘์กฐ๊ฑด์ด ์๋ ์ธ๋ฑ์ค์ ์ปฌ๋ผ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ ์ ์ด์ผ ํ๊ณ ’, ‘์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ์ปฌ๋ผ๋ง์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค. (์ปค๋ฒ๋ง ์ธ๋ฑ์ค)’ ๋ง์ฝ, ์ ๋ํฌํ ๊ฐ์ด ๋ง์์ง๋ฉด ์ค์บ ์์ ์ง์ ์ ๊ฒ์ํ๋ ์์
๋ ๋ง์ด ํ์ํด์ง ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด (gender, birth)๋ผ๋ฉด gender์ ๊ฐ์๋งํผ ์ค์บ ์์ ์ง์ ์ด ์๊ธฐ๊ฒ ๋๋ ๊ฒ์ด๋๊น ์ ๋ํฌํ ๊ฐ์ด ์ ์ด์ผ ํ๋ค๋ ๊ฒ.
๋ง์ฝ, ์ธ๋ฑ์ค ์ธ์ ๋ค๋ฅธ ์ปฌ๋ผ์ด ํ์ํ๋ค๋ฉด ํ ํ
์ด๋ธ ์ค์บ์ ํตํด์ ์คํ ๊ณํ์ ์๋ฆฝํ๋ค.
๐ฌ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค (๋ณตํฉ ์ธ๋ฑ์ค)
์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ์ ํฌํจํ๋ ์ธ๋ฑ์ค์ด๋ค. ์ธ๋ฑ์ค์ ๋ ๋ฒ์งธ ์ปฌ๋ผ์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ ์์กดํด์ ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ด ๋๊ฐ์ ๋ ์ฝ๋์ ๋ํด์๋ง ์ ์๋ฏธํ๋ฏ๋ก, ๊ฐ ์ปฌ๋ผ์ ์์๋ ์๋นํ ์ค์ํ ํฌ์ธํธ์ด๋ค.
๐ฑ B-Tree ์ธ๋ฑ์ค์ ์ ๋ ฌ๊ณผ ์ค์บ ๋ฐฉํฅ
๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค์ ํค ๊ฐ์ ํญ์ ์ค๋ฆ์ฐจ์ / ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
๐ฌ ์ธ๋ฑ์ค์ ์ ๋ ฌ
mySQL 8.0๋ถํฐ๋ ์ ๋ ฌ ์์๋ฅผ ํผํฉํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
CREATE INDEX idx_name_age ON crew (name ASC, age DESC);
๐ฌ ์ธ๋ฑ์ค ์ค์บ ๋ฐฉํฅ
์ธ๋ฑ์ค๋ ํญ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ง๋ง, ์ต์๊ฐ๋ถํฐ ์ฝ์ผ๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ๊ฐ์ ธ์ค๊ณ ์ต๋๊ฐ๋ถํฐ ์ฝ์ผ๋ฉด ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. ์ฆ, ์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด๋ค.
SELECT * FROM crew
WHERE name >= 'journey'
ORDER BY name ASC
LIMIT 4;
์ด ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ name์ ์ธ๋ฑ์ค๋ฅผ ํตํด ‘journey’ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋ค์, ์ ๋ฐฉํฅ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฝ์ผ๋ฉด์ 4๊ฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋๋ค. (ASC)
SELECT * FROM crew
ORDER BY name DESC
LIMIT 4;
๋ฐ๋ฉด์ ์ด ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ name ์ธ๋ฑ์ค๋ฅผ ์ญ์์ผ๋ก ์ฝ์ด์ 4๊ฐ๋ง ๊ฐ์ ธ์ค๋ฉด ๋๋ค. (DESC)
๐ฌ ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค
๋ณตํฉ ์ธ๋ฑ์ค์์ ๋ด๋ฆผ์ฐจ์, ์ค๋ฆ์ฐจ์์ด ํผํฉ๋์ด ์๋ค๋ฉด ‘๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค’์ ์ฌ์ฉ๋ ๊ณ ๋ คํด์ผ ํ๋ค.
์๋์ ๋ ์ฝ๋๋ฅผ ๋์์ผ๋ก ํ๋ค๋ฉด ๊ทธ๋ฅ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋์ง๋ง, ๋๋์ ๋ ์ฝ๋๋ฅผ ๋์์ผ๋ก ํ๋ค๋ฉด ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค๊ฐ ๋ ํจ์จ์ ์ผ ์ ์๋ค.
์ ๊ทธ๋ฆผ์์ 4๊ฐ์ง์ ํค์๋๋ฅผ ์ป์ด๋ผ ์ ์๋ค.
- ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค: ์์ ๊ฐ์ ์ธ๋ฑ์ค ํค๊ฐ B-Tree์ ์ผ์ชฝ์ผ๋ก ์ ๋ ฌ๋ ์ธ๋ฑ์ค
- ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค: ํฐ ๊ฐ์ ์ธ๋ฑ์ค ํค๊ฐ B-Tree์ ์ผ์ชฝ์ผ๋ก ์ ๋ ฌ๋ ์ธ๋ฑ์ค
- ์ธ๋ฑ์ค ์ ๋ฐฉํฅ ์ค์บ: ์ธ๋ฑ์ค ๋ฆฌํ ๋
ธ๋์ ์ผ์ชฝ → ์ค๋ฅธ์ชฝ์ผ๋ก ์ค์บ (์์๋๋ก ์ฝ๋ ๊ฒ)
- ์ธ๋ฑ์ค ์ญ๋ฐฉํฅ ์ค์บ: ์ธ๋ฑ์ค ๋ฆฌํ ๋
ธ๋์ ์ค๋ฅธ์ชฝ → ์ผ์ชฝ์ผ๋ก ์ค์บ (๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ ๊ฒ)
๋ณดํต ์ธ๋ฑ์ค ์ ๋ฐฉํฅ ์ค์บ์ด ์ข ๋ ๋น ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง๋ค. ์ด๋ ํ์ด์ง ์ ๊ธ์ด ์ธ๋ฑ์ค ์ ๋ฐฉํฅ ์ค์บ์ ์ข ๋ ์ ํฉํ๊ฒ ์ค๊ณ๋์์ผ๋ฉฐ, ํ์ด์ง ๋ด์ ์ธ๋ฑ์ค ๋ ์ฝ๋๊ฐ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฆฌํ ๋ ธํธ์ ํ์ด์ง๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๋์ด ์๋๋ฐ, ํ์ด์ง ๋ฝ ๊ณผ์ ์์ ๋ฐ๋๋ฝ ๋ฐฉ์ง๋ฅผ ์ํด ๋ฝ์ ํ๋ํ๋ ๊ฒ ์ ๋ฐฉํฅ์์๋ง ๊ฐ๋ฅํ๊ณ , ์ญ๋ฐฉํฅ์์๋ ์ข ๋ณต์กํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๊ตฌ์กฐ์ ์ผ๋ก ์ธ๋ฑ์ค ์ค์บ์๋ ์ ๋ฐฉํฅ์ด ์ข ๋ ์ ํฉํ ๋๋?
- ๋ํ, ์ธ๋ฑ์ค๋ ํ์ด์ง ๋ด๋ถ์์ 4~8๊ฐ ์ ๋ ๋ฌถ์ด์ ๊ทธ๋ฃน์ ๋ง๋ค์ด, ํด๋น ๊ทธ๋ฃน์ ๋ํํค๋ฅผ ๋ฝ์ ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌํ๋ค. (= ํ์ด์ง ๋๋ ํฐ๋ฆฌ) ๊ทผ๋ฐ ์ด ๋๋ ํฐ๋ฆฌ๊ฐ ๋จ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค ๋ณด๋ ์ญ๋ฐฉํฅ์ผ๋ก ์ ๊ทผ์ด ์ ๋์ด์ ๋ ๋๋ฆฐ ๊ฒ.
ex) ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค๋ผ๋ฉด ํค๊ฐ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ด ์ ๋ฐฉํฅ ์ค์บ์ด ๋น ๋ฅธ๋ฐ, ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค๋ผ๋ฉด ํค๊ฐ์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ด ์ญ๋ฐฉํฅ ์ค์บ์ด ์ข ๋ ๋น ๋ฅธ ๋๋... ์ธ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ญ๋ฐฉํฅ ์ค์บ์ ์ฌ์ฉํ๋ค๋ฉด ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํด๋ณด์.
SELECT * FROM crew
WHERE id = ?
ORDER BY name DESC
LIMIT 10;
์์ ์ฟผ๋ฆฌ์ ๋ํด์ ์๋์ด๋ผ๋ฉด ์ค๋ฆ์ฐจ์, ๋๋์ด๋ฉด ๋ด๋ฆผ์ฐจ์์ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค: INDEX (id ASC, name ASC);
๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค: INDEX (id DESC, name DESC);
๐ฑ B-Tree ์ธ๋ฑ์ค์ ๊ฐ์ฉ์ฑ๊ณผ ํจ์จ์ฑ
๐ฌ ๋น๊ต ์กฐ๊ฑด์ ์ข ๋ฅ์ ํจ์จ์ฑ
SELECT * FROM crew
WHERE course = 'Backend' and age >= 23;
์์ ๊ฐ์ ์ฟผ๋ฆฌ์ ์๋์ ๊ฐ์ ์ธ๋ฑ์ค๊ฐ ์ถ๊ฐ๋์๋ค๊ณ ์๊ฐํด๋ณด์.
INDEX (course, age)
INDEX (age, course)
์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ course = 'Backend' and age >= 23์ธ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋ค์, course=’Backend’๊ฐ ์๋ ๋๊น์ง ์ธ๋ฑ์ค๋ฅผ ๊ทธ๋ฅ ์ญ ์ฝ๋๋ค. ์ด๋๋ ์ฝ์ ๋ ์ฝ๋๊ฐ ๋ชจ๋ ์กฐ๊ฑด์ ์ ํด๋นํ๋ ๋ ์ฝ๋๊ฐ ๋๋ค.
ํ์ง๋ง ๋ ๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ age >= 23 and course = 'Backend'์ธ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ณ , ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด์ course=’Backend’์ธ์ง ๊ฒฝ์ฐ๋ฅผ ์ฐพ์์ผ ํ๋ค. (ํํฐ๋ง) ์๋๋ฉด course์ ๊ฒฝ์ฐ age๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ด ๋๊ธฐ ๋๋ฌธ์ ‘course’๋ผ๋ ์ปฌ๋ผ์ ๋น๊ต ์์ ์ ์ขํ๋๋ฐ ๋์์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋จ์ํ ํด๋น ๊ฐ์ด ์ผ์นํ๋์ง์๋ง ์ฌ์ฉ๋๋ค.
์ฌ๊ธฐ์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ course = 'Backend' and age >= 23์ ์์
๋ฒ์ ๊ฒฐ์ ์กฐ๊ฑด, ๋ ๋ฒ์งธ ์ธ๋ฑ์ค์ course = 'Backend'๋ฅผ ์ฒดํฌ ์กฐ๊ฑด์ด๋ผ๊ณ ํ๋ค.
๐ฌ ์ธ๋ฑ์ค์ ๊ฐ์ฉ์ฑ
B-Tree ์ธ๋ฑ์ค๋ ์ผ์ชฝ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ ๊ฐ์ด ์ ๋ ฌ๋์ด ์๋ค. ๊ทธ๋์ ์ผ์ชฝ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ด ์ ๋๋ค.
๋จ์ผ ์ธ๋ฑ์ค์ like ๊ฒ์์์ ์ ์ํฉ์ ๋ณผ ์ ์๋ค.
SELECT * FROM crew WHERE name like '%nez';
name ์ปฌ๋ผ์ ์ ์ฅ๋ ๊ฐ์ ํ ๊ธ์์ฉ ๋น๊ตํด๊ฐ๋ฉฐ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ผ ํ์ง๋ง, ์์ ๊ฐ์ด ์ผ์ชฝ ๋ถ๋ถ์ด ๊ณ ์ ๋์ง ์์๋ค๋ฉด ์ธ๋ฑ์ค์ ํจ๊ณผ๋ฅผ ๋ณด๊ธฐ ์ด๋ ต๋ค.
๋ํ, ๋ณตํฉ ์ธ๋ฑ์ค ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ ํ ์ปฌ๋ผ์ด ์๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
SELECT * FROM crew WHERE age >= 20;
์ฌ๊ธฐ์ course ์ ๋ณด์ ๋ํ ์กฐ๊ฑด์ ์ด ์๋, age์ ๋ํ ์กฐ๊ฑด์ ์ด๋ผ๋ฉด ํจ์จ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ฌ ๊ฐ์ฉ์ฑ๊ณผ ํจ์จ์ฑ ํ๋จ
๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์์ B-Tree ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (์์ ๋ฒ์ ๊ฒฐ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ)
- NOT EQUAL ๋น๊ต
WHERE name <> ‘journey’
WHERE name NOT IN (’journey’, ‘hello’)
WHERE age NOT BETWEEN 20 AND 23
WHERE name IS NOT NULL
- LIKE ‘%??’
WHERE name LIKE ‘%ney’
WHERE name LIKE ‘_ney’
WHERE name LIKE ‘%our%’
- ์คํ ์ด๋ ํจ์๋ ๋ค๋ฅธ ์ฐ์ฐ์๋ก ์ธ๋ฑ์ค ์ปฌ๋ผ์ด ๋ณํ๋ ํ ๋น๊ต๋ ๊ฒฝ์ฐ
WHERE SUBSTRING (name, 1, 1) = ‘J’
WHERE DAYOFMONTH(date) = 1
- NON-DETERMINISTIC ์์ฑ์ ์คํ ์ด๋ ํจ์๊ฐ ๋น๊ต ์กฐ๊ฑด์ ์์ ๊ฒฝ์ฐ
WHERE name = function()
- ๋ฐ์ดํฐ ํ์
์ด ์๋ก ๋ค๋ฅธ ๋น๊ต
WHERE char_column = 20
- ๋ฌธ์์ด ๋ฐ์ดํฐ ํ์
์ ์ฝ๋ ์ด์
์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
WHERE utf8_bin_char_column = euckr_bin_char_column
์ฐธ๊ณ ๋ก, MySQL์์๋ NULL๋ ์ธ๋ฑ์ค์ ์ ์ฅ๋๋ค.
๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉ์ด ์ ๋๋ค.
CREATE INDEX idx_example (col_1, col_2, col_3, ... col_n)
- col_1์ ๋ํ ๋น๊ต ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ
- col_1์ ๋ํ ๋น๊ต ์กฐ๊ฑด์ด ์์์ ๋ดค๋ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์ ์ํ๋ ๊ฒฝ์ฐ
์ ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. (i๋ 2 ์ด์ n ๋ฏธ๋ง)
- col_1 ~ col_(i-1)๊น์ง ๋๋ฑ ๋น๊ต ํํ์ผ ๋ (=์ด๋ in)
- col_i์ ๋ํด ๋๋ฑ ๋น๊ต (=์ด๋ in), ํฌ๊ณ ์์ ๋น๊ต (<, >), like๋ก ์ข์ธก ์ผ์น ๋น๊ต (like ‘jour%’)
์ด๋ col_1 ~ col_i๋ ์์
๋ฒ์ ๊ฒฐ์ ์กฐ๊ฑด์ผ๋ก, col_i+1 ~ col_n์ ์ฒดํฌ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ค.