B-Tree Index
Last updated
Was this helpful?
Last updated
Was this helpful?
B-Tree ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ, Binary์ B๊ฐ ์๋๋ผ Balanced์ B
์ต์์์ ํ๋์ ๋ฃจํธ ๋ ธ๋๊ฐ ์กด์ฌํ๊ณ , ๊ทธ ํ์์ ์์ ๋ ธ๋๊ฐ ๋ถ์ด ์๋ ํํ๋ก ์๋์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ค.
Root Node: ์ต์์ ๋ ธ๋
Branch Node: ์ค๊ฐ์ ์๋ ๋ ธ๋
Leaf Node: ๊ฐ์ฅ ํ์์ ์๋ ๋ ธ๋
MyISAM์์๋ ๋ฆฌํ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, InnoDB์์๋ ๋ฆฌํ ๋ ธ๋์์ PK ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. ๋๋ฌธ์ InnoDB์์๋ PK ๊ฐ์ ์ด์ฉํด ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์, PK ๊ฐ์ ์ด์ฉํด ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด ์ถ๊ฐ์ ์ผ๋ก ํ์ํ๋ค.
๊ฒฐ๊ตญ ์์ ๊ฐ์ด ์ฌ๋ฌ ๋์ค๋ฅผ ๊ฑฐ์ณ ์ค์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ฐ๋ก ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋ ๋ณด๋ค ์ฝ 4-5๋ฐฐ ์ ๋ ๋ ๋ง์ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํค ์ถ๊ฐ๋ ์ญ์ ์์ ์ด ๋ฐ์ํ๋๋ฐ, ๊ฐ ์์ ์ ์๋์ ๊ฐ์ด ์ฒ๋ฆฌ๋๋ค.
์ธ๋ฑ์ค ํค ์ถ๊ฐ
B-Tree์ ์ ์ฅ๋ ๋ ์ ์ฅ๋ ํค ๊ฐ์ ์ด์ฉํด ์ ์ ํ ์์น๋ฅผ ํ์ ํ ๋ฆฌํ ๋ ธ๋์ ์ ์ฅ
๋ง์ฝ ์ ์ฅํ ์์น์ ๋ฆฌํ ๋ ธ๋๊ฐ ๊ฝ ์ฐจ์๋ค๋ฉด ๋ฆฌํ ๋ ธ๋๋ฅผ ๋ถ๋ฆฌํ๊ณ ์๋ก์ด ๋ฆฌํ ๋ ธ๋๋ฅผ ์์ฑ
์ด ๋ ์์ ๋ธ๋์น ๋ ธ๋๊น์ง ์ฒ๋ฆฌ ๋ฒ์๊ฐ ๋์ด์ ธ ๋ง์ ๋น์ฉ์ด ๋ฐ์
์ด ๋ ๋ฐ์ํ๋ ๋น์ฉ์ ๋๋ถ๋ถ์ด ๋ฉ๋ชจ๋ฆฌ์ CPU์์ ๋ฐ์ํ๋ ๊ฒ์ด ์๋, ๋์คํฌ๋ก๋ถํฐ ์ฝ๊ณ /์ฐ๊ธฐ ์์ ์ ๋ง์ ๋น์ฉ(์๊ฐ)์ด ๋ฐ์
InnoDB์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํค ์ถ๊ฐ ์์ ์ ์ง์ฐ์์ผ ๋์ค์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๋ ์กด์ฌ(=์ฒด์ธ์ง ๋ฒํผ)
Primary Key, Unique Index ๊ฒฝ์ฐ ์ค๋ณต์ฒดํฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ง์ฐ์ํฌ ์ ์์
์ธ๋ฑ์ค ํค ์ญ์
ํด๋น ํค ๊ฐ์ด ์ ์ฅ๋ B-Tree ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ์ ์ญ์ ๋งํฌ๋ง ํ๋ฉด ์์ ์๋ฃ
์ญ์ ๋งํน๋ ์ธ๋ฑ์ค ํค ๊ณต๊ฐ์ ๋ฐฉ์นํ๊ฑฐ๋ ์ฌํ์ฉ ๊ฐ๋ฅ
์ญ์ ๋ํ ๋์คํฌ ์ฐ๊ธฐ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋์คํฌ I/O ๋น์ฉ ๋ฐ์
์ถ๊ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ญ์ ์์ ๋ ์ง์ฐ์ํฌ ์ ์์
์ธ๋ฑ์ค ํค ๋ณ๊ฒฝ
B-Tree์ ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ๋ฆฌํ ๋ ธ๋ ์์น์ ๋ณ๊ฒฝ ํ์ํ๊ธฐ ๋๋ฌธ์, ์ด ๋ ํค ๊ฐ์ ์ญ์ ํ ํ ์๋ก์ด ํค ๊ฐ์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
์์ ์ญ์ ๋ฐ ์ถ๊ฐ ๊ณผ์ ์ด ์ ์ฐจ์ ์ผ๋ก ์งํ(๋ง์ฐฌ๊ฐ์ง๋ก ์ง์ฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
์ธ๋ฑ์ค ํค ๊ฒ์
์์ ๋น์ฉ๋ค์ ๊ฐ์ํ๊ณ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ค ํ๋(๋น ๋ฅธ ํ์)
๋ฃจํธ ๋ ธ๋๋ก๋ถํฐ ์์ํด ๋ธ๋์น ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ์ต์ข ๋ฆฌํ ๋ ธ๋๊น์ง ์ด๋ํ๋ฉด์ ํ์(=ํธ๋ฆฌ ํ์)
SELECT(์กฐํ)์์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋ UPDATE/DELETE์์๋ ์กฐํ ํ ๋ณ๊ฒฝ/์ญ์ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋จ
ํ์ด์ง๋ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ณธ ๋จ์๋ก, ๋์คํฌ์ ๋ชจ๋ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ ์ ์ต์ ์์ ๋จ์๊ฐ ๋๋ค. ๋ํ ํ์ด์ง๋ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๋ฒํผ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๋ ๊ธฐ๋ณธ ๋จ์์ด๊ธฐ ๋๋ฌธ์, ๋จ ํ๋์ ๋ ์ฝ๋๋ฅผ ์ฝ๋๋ผ๋ ๊ฒฐ๊ตญ์ ํ๋์ ํ์ด์ง๋ฅผ ์ฝ๊ฒ ๋๋ค. ๋๋ฌธ์ ํ๋์ ํ์ด์ง์ ๋ง์ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋์ด ์์์๋ก ๋์คํฌ I/O๊ฐ ๋ฐ์ํ๋ ํ์๊ฐ ์ค์ด๋ค๊ฒ ๋๊ณ , ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋๋ค.
์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ปฌ๋ผ์ ํฌ๊ธฐ / ๋ ์ฝ๋ ๊ฑด์ / ์ ๋ํฌ ์ธ๋ฑ์ค ํค ๊ฐ์ ๊ฐ์ ๋ฑ์ ๋ฐ๋ผ ๋ณ๊ฒฝ/์กฐํ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง ์ ์๋ค.
์ธ๋ฑ์ค๋ ๊ฒฐ๊ตญ์ ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์, B-Tree์ ๊ฐ ๋ ธ๋์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฐ์๋ ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
์ธ๋ฑ์ค ํ์ด์ง ํฌ๊ธฐ: 16KB
์ธ๋ฑ์ค ํค: 16 Byte
์์๋ ธ๋ ์ฃผ์: 12 Byte
ํ๋์ ์ธ๋ฑ์ค ํ์ด์ง์ ์ ์ฅํ ์ ์๋ ์ต๋ ํค ๊ฐ์ ๊ฐ์: 16 * 1024 / (16 + 12) = 585
์ธ๋ฑ์ค์ ํค๊ฐ ์ปค์ง๊ฒ ๋๋ฉด, ๊ทธ๋งํผ ํ๋์ ์ธ๋ฑ์ค ํ์ด์ง์ ์ ์ฅํ ์ ์๋ ํค ๊ฐ์ ๊ฐ์๊ฐ ์ค์ด๋ค๊ฒ ๋๋ฉด์, ๋์คํฌ I/O ํ์๊ฐ ์ฆ๊ฐํ๊ณ ๊ทธ๋งํผ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
B-Tree ์ธ๋ฑ์ค์ ๊น์ด๋ ์ฑ๋ฅ์ด ์ค์ํ ์์ ์ค ํ๋์ง๋ง, ์ง์ ์ ์ดํ ์ ์๋ ์์๊ฐ ์๋๋ฉฐ, ์์์ ์ธ๊ธ ๋ ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ์ B-Tree์ ๊น์ด์ ๊ด๊ณ๋ ์๋์ ๊ฐ์ ์ด์ ๋ก ์ง๊ฒฐ๋๋ค.
์ธ๋ฑ์ค ํค ๊ฐ์ ํ๊ท ํฌ๊ธฐ๊ฐ ๋์ด๋๋ฉด ํ๋์ ํ์ด์ง์ ์ ์ฅํ ์ ์๋ ํค ๊ฐ์ ๊ฐ์๊ฐ ์ค์ด๋ค๊ฒ ๋จ
ํ๋์ ํ์ด์ง์ ์ ์ฅํ ์ ์๋ ํค ๊ฐ์ ๊ฐ์๊ฐ ์ค์ด๋ค๋ฉด, ํ๋์ ๋ ธ๋์ ์ ์ฅํ ์ ์๋ ์์ ๋ ธ๋์ ๊ฐ์๊ฐ ์ค์ด๋ค๊ฒ ๋จ
๊ฒฐ๊ตญ B-Tree์ ๊น์ด๊ฐ ๊น์ด์ง๊ฒ ๋จ
๊น์ด๊ฐ ๊น์ด์ง ์๋ก ๋์คํฌ I/O ํ์๊ฐ ์ฆ๊ฐํ๊ฒ ๋๊ณ , ์ด๋ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง
๋๋ฌธ์ ์ธ๋ฑ์ค ํค ๊ฐ์ ํ๊ท ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฒ์ ๊น์ด๋ฅผ ์ค์ด๋ ๊ฒ๊ณผ ์ง๊ฒฐ๋๊ณ , ์ด๋ ๋์คํฌ I/O ํ์๋ฅผ ์ค์ด๊ฒ ๋๋ฉด์, ๊ทธ๋งํผ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ ํ๋(Selectivity) / ๊ธฐ์์ฑ(Cardinality)๋ ๊ฑฐ์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ฉฐ, ๋ชจ๋ ์ธ๋ฑ์ค ํค ๊ฐ ๊ฐ์ด๋ฐ ์ ๋ํฌํ ๊ฐ์ ์๋ฅผ ์๋ฏธํ๋ค.
์ ์ฒด ์ธ๋ฑ์ค ํค ๊ฐ: 100๊ฐ
์ ๋ํฌํ ๊ฐ: 10๊ฐ
๊ธฐ์์ฑ: 10
์ค๋ณต๋ ๊ฐ์ด ๋ง์์ง๋ฉด ๊ธฐ์์ฑ์ด ๋ฎ์์ง๊ฒ ๋๊ณ , ๊ธฐ์์ฑ์ด ๋ฎ์์ง๋ฉด ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ ํ ๋ ์ฝ๋์ ๊ฑด์๊ฐ ๋์ด๋๊ฒ ๋๋ค.
์์
์ธ๋ฑ์ค๋ ์ปฌ๋ผ(country)์ ๋ํด์๋ ์ ์ฒด ๋ ์ฝ๋์ ๊ฑด์๋ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ ๋ฑ์ ๋ํ ํต๊ณ ์ ๋ณด๋ฅผ ๊ฐ์ง
์ ์ฒด ๋ ์ฝ๋ ๊ฑด์๋ฅผ ์ ๋ํฌ ๊ฐ ๊ฐ์๋ก ๋๋๊ฒ๋๋ฉด ํ๋์ ํค ๊ฐ์ผ๋ก ๊ฒ์ํ์ ๋ ํ๊ท ์ ์ผ๋ก ์ฝ์ด์ผ ํ๋ ๋ ์ฝ๋ ๊ฑด์๋ฅผ ์ ์ ์์
๊ธฐ์์ฑ์ด ๋ฎ์์ง๋ฉด ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผ ํ ๋ ์ฝ๋์ ๊ฑด์๊ฐ ๋์ด๋๊ฒ ๋๋ฉด์, ๊ทธ๋งํผ ํ์ด์ง๋ฅผ ์ฝ์ด์ผ ํ๋ ํ์๊ฐ ๋์ด๋๊ฒ ๋๊ณ , ๊ทธ๋งํผ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
์ธ๋ฑ์ค๋ฅผ ํตํ ์ฝ๊ธฐ๋ ๋ฐ๋ก ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ๋ณด๋ค ๋์ ๋น์ฉ(4-5๋ฐฐ)์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ ํ๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ค. ์ ์ฒด ๋ ์ฝ๋์ 20-25%๋ฅผ ๋์ด๊ฐ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์, ์ตํฐ๋ง์ด์ ์๊ฒ ๊ฐ์ ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํํธ๋ฅผ ์ถ๊ฐํด๋ ์ฑ๋ฅ์ ์ด์ ์ ์ป์ ์ ์๋ค.
์ธ๋ฑ์ค ์ ๊ทผ ๋ฐฉ๋ฒ ๊ฐ์ด๋ฐ ๊ฐ์ฅ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ์๋ ์ฟผ๋ฆฌ์ฒ๋ผ ์ธ๋ฑ์ค ํค ๊ฐ์ ๋ฒ์๊ฐ ๊ฒฐ์ ๋์ด ์์ ๋, ์์ํด์ผ ํ ์์น๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ ์์น๋ถํฐ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ ๊ฒ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฆฌํ ๋ ธ๋๊น์ง ๋ค์ด๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ธ ์ค์บ ์์ ์ง์ ์ ์ฐพ์(= ์ธ๋ฑ์ค ํ์(index seek))
์์์ ํ์๋ ์์น๋ถํฐ ํ์ํ ๋งํผ ์ธ๋ฑ์ค๋ฅผ ์ฐจ๋ก๋๋ก ์ฝ์(= ์ธ๋ฑ์ค ์ค์บ(index scan))
์ฝ์ด๋ค์ธ ์ธ๋ฑ์ค ํค์ ๋ ์ฝ๋ ์ฃผ์๋ฅผ ์ด์ฉํด ์ผ์นํ ์ค์ ๋ ์ฝ๋๋ฅผ ํ ๊ฑด ํ ๊ฑด ์ฝ์ด์ด(๋๋ค I/O ๋ฐ์)
์ฟผ๋ฆฌ๋ฅผ ์ถฉ์กฑ์ํค๋๋ฐ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ค์์๋ง ์ฝ์ด์ฌ ์ ์๋ ์ธ๋ฑ์ค๋ฅผ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ผ๊ณ ํ๋ค. ์ธ๋ฑ์ค ์ค์บ๋ง์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ 3๋ฒ์ ํด๋นํ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค๋ ์์ ์ด ํ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค I/O๊ฐ ๋ฐ์ํ์ง ์์ ํจ์ฌ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค.
์ธ๋ฑ์ค์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ์ฝ๋ ๋ฐฉ์์ผ๋ก, ๋ณดํต ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ด ์๋ ๋ ๋ฒ์งธ ์ดํ์ ์ปฌ๋ผ์ธ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค. ๋ณดํต ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ ์ค์ ๋ ์ฝ๋๊ฐ ๋ด๊ธด ํ ์ด๋ธ์ ํฌ๊ธฐ๋ณด๋ค ์์ผ๋ฏ๋ก ์ง์ ํ ์ด๋ธ์ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ๋ ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค. ๋๋ฌธ์ ์ธ๋ฑ์ค ํ ์ค์บ์ ์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค์ ๋ช ์๋ ์ปฌ๋ผ๋ง์ผ๋ก ์กฐ๊ฑด์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ(์ปค๋ฒ๋ง ์ธ๋ฑ์ค ์กฐ๊ฑด) ์ฌ์ฉํ๊ฒ ๋๋ค.
์ธ๋ฑ์ค ๋ฆฌํ ๋ ธ๋์ ์ ์ผ ์(ํน์ ๋ค)์ผ๋ก ์ด๋
์ธ๋ฑ์ค๋ฅผ ์ฐจ๋ก๋๋ก ์ฝ์ผ๋ฉด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ค์บ
์ธ๋ฑ์ค ํ ์ค์บ ์ ์ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ฉฐ, ์ค์ ํ ์ด๋ธ์ ์ฝ์ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค I/O๋ ๋ฐ์ํ์ง ์๋๋ค.
๋ฌ์ฑ๋ฌ์ฑํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฝ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ค๊ฐ์ ํ์์น ์๋ ์ธ๋ฑ์ค ํค ๊ฐ์ ๋ฌด์(SKIP)ํ๊ณ ์ฝ๋ ๋ฐฉ์์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก GROUP BY ๋๋ MAX(), MIN() ๊ฐ์ ์งํฉ ํจ์์ ๋ํด ์ต์ ํ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
์ ์ฟผ๋ฆฌ์์ ์ธ๋ฑ์ค๊ฐ (dept_no, emp_no) ์กฐํฉ์ผ๋ก ์ด๋ฏธ ์ ๋ ฌ๋์ด์๊ธฐ ๋๋ฌธ์ depth_no ๊ทธ๋ฃน ๋ณ๋ก ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋(๊ฐ์ฅ ์์ emp_no)๋ง ์ฝ์ด์ค๋ฉด ๋๋ค. ์ฆ ์ธ๋ฑ์ค์์ WHERE ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฒ์ ์ ์ฒด๋ฅผ ์ค์บํ ํ์๊ฐ ์๋ ๊ฒ์ ์ตํฐ๋ง์ด์ ๊ฐ ํ๋จํ๊ณ ์ค๊ฐ์ ๋ ์ฝ๋๋ ๋ฌด์ํ๊ณ ํ์ํ ๋ ์ฝ๋๋ง ์ฝ์ด์ค๋ ๋ฐฉ์์ด๋ค.
5
d002
10042
Finance
Magy
O
5
d002
10043
Finance
Yinghua
X
5
d002
10044
Finance
Eber
X
...
...
...
...
...
X
...
...
...
...
...
X
6
d003
10045
Human
Kyoichi
O
6
d003
10046
Human
Eberhardt
X
6
d003
10047
Human
Admanatios
X
...
...
...
...
...
X
...
...
...
...
...
X
7
d004
10048
Legal
Seong
O
7
d004
10049
Legal
Ziya
X
7
d004
10050
Legal
Eber
X
...
...
...
...
...
...
์ธ๋ฑ์ค์ ํต์ฌ์ ๊ฐ์ด ์ ๋ ฌ๋์ด ์๋ค๋ ์ ์ธ๋ฐ, ์ด ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ปฌ๋ผ ์์๊ฐ ์ค์ํ๋ค.
์ ์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด WHERE ์กฐ๊ฑด์ ์ gender ์ปฌ๋ผ์ ๋ํ ๋น๊ต ์กฐ๊ฑด์ด ํฌํจ๋์ด์ผ ํ๋ค.(MySQL 8.0 ๋ฒ์ ์ด์ )
ํ์ง๋ง MySQL 8.0 ๋ฒ์ ๋ถํฐ๋ ์ธ๋ฑ์ค ์คํต ์ค์บ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด, 1๋ฒ ์ฟผ๋ฆฌ์ ๋ํด์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
์ธ๋ฑ์ค ์คํต ์ค์บ์ ํ ์ด๋ธ์ ์ค์บํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ๋๋ค.
5
M
1965-03-09
X
5
M
1965-05-09
O
5
M
1965-06-09
O
...
...
...
O
6
M
1965-12-09
O
6
F
1965-01-09
X
6
F
1965-02-09
X
...
...
...
X
7
F
1965-04-09
X
7
F
1965-05-09
O
7
F
1965-06-09
O
...
...
...
O
gender ์ปฌ๋ผ์ด ๊ฐ์ง ์ ๋ํฌ ๊ฐ์ ๊ตฌํจ(์ปฌ๋ผ์ ํ์ ์ ์๊ด ์์)
๊ฐ ์ ๋ํฌ ๊ฐ์ ๋ํด ์กฐ๊ฑด์ ์ถ๊ฐํ ์ฟผ๋ฆฌ๋ฅผ ์คํ
๊ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ ์ธ์ง ์ค์บ์ผ๋ก ์ฒ๋ฆฌ
๊ฐ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
๊ฒฐ๊ตญ gender ์ปฌ๋ผ์์ ์ ๋ํฌํ ๊ฐ์ ๋ชจ๋ ์กฐํํ์ฌ ์ฃผ์ด์ง ์ฟผ๋ฆฌ์ gender ์ปฌ๋ผ์ ์กฐ๊ฑด์ ์ถ๊ฐํด์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ ํํ์ ์ต์ ํ๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์๋ ๋ ๊ฐ์ง ๋จ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํญ์ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๊ฒ์ ์๋๋ค.
WHERE ์กฐ๊ฑด์ ์ ์กฐ๊ฑด์ด ์๋ ์ธ๋ฑ์ค์ ์ ํ ์ปฌ๋ผ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ ์ ์ด์ผ ํ๋ค.
์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ์ปฌ๋ผ๋ง์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํด์ผ ํ๋ค.(= ์ปค๋ฒ๋ง ์ธ๋ฑ์ค)
์ธ๋ฑ์ค ์ธ์ ์ปฌ๋ผ์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ ํ ํ ์ด๋ธ ์ค์บ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
๋ ๊ฐ ์ด์์ ์ปฌ๋ผ์ ํฌํจํ๋ ์ธ๋ฑ์ค๋ฅผ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ผ๊ณ ํ๋ฉฐ, ์ค์ ์๋น์ค ํ๊ฒฝ์์๋ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค์์ ์ธ๋ฑ์ค ๋ด์ ๊ฐ ์ปฌ๋ผ ์์น๊ฐ ์ฑ๋ฅ์ ์ค์ํ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ์ปฌ๋ผ์ ์์๋ฅผ ์ ๊ณ ๋ คํด์ผ ํ๋ค.
์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ์ค์ ํ ์ ๋ ฌ ๊ท์น์ ๋ฐ๋ผ ํญ์ ์ค๋ฆ์ฐจ์/๋ด๋ฆผ์ฐจ์ ์ค ํ๋๋ก ์ ๋ ฌ๋์ด ์ ์ฅ๋๋ค.
์์ฑ๋ ์ธ๋ฑ์ค์๋ ๋ณ๊ฐ๋ก ์ค์บ ํ ๋๋ ์์ฑ๋ ์ธ๋ฑ์ค์ ์ ๋ ฌ ๊ท์น๊ณผ๋ ์๊ด์์ด ์ํ๋ ๋ฐฉํฅ์ผ๋ก ์ค์บํ ์ ์๋ค.(๋ฐฉํฅ์ ์ตํฐ๋ง์ด์ ๊ฐ ์ค์๊ฐ์ผ๋ก ๋ง๋ค์ด๋ธ ์คํ ๊ณํ์ ๋ฐ๋ผ ๊ฒฐ์ ) ์๋ฅผ ๋ค์ด ์๋ ์ฟผ๋ฆฌ๋ MySQL ์ตํฐ๋ง์ด์ ๊ฐ ํจ์จ์ ์ธ ๋ฐฉํฅ์ผ๋ก ์ค์บํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ์ญ์์ผ๋ก ์ ๊ทผํ์ฌ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ง ์ฝ๊ฒ ๋๋ค.
** ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด์ง ์ ๊ธ์ด ์ธ๋ฑ์ค ์ ์ ์ค์บ(Forward index scan)์ ๋ ์ ํฉํ ๊ตฌ์กฐ๊ธฐ ๋๋ฌธ์ ์ ๋ฐฉํฅ ์ค์บ์ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค์์ ๊ฐ ์ปฌ๋ผ์ ์์์ ๋น๊ต ์กฐ๊ฑด์ ๋ฐ๋ผ ์ธ๋ฑ์ค์ ๊ฐ์ฉ์ฑ๊ณผ ํจ์จ์ฑ์ด ๋ฌ๋ผ์ง๋ค.
์ผ์ด์ค A: INDEX(dept_no, emp_no)
dept_no='d002' AND emp_no>=10114
์ธ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ณ dept_no๊ฐ 'd002'๊ฐ ์๋ ๋ ๊น์ง ์ค์บ
...
...
...
X
6
d002
10114
O
6
d002
10117
O
6
d002
10300
O
...
...
...
O
7
d002
10595
O
7
d003
10111
X
...
...
...
X
์ผ์ด์ค B: INDEX(emp_no, dept_no)
dept_no='d002' AND emp_no>=10114
์ธ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ณ ๊ทธ ํ ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด dept_no๊ฐ 'd002'์ธ์ง ํ์ธ
...
...
...
...
6
10111
d003
X
6
10114
d002
O
6
10117
d002
O
6
10300
d002
O
...
...
...
O
7
10595
d002
O
...
...
d001
O
B-Tree ์ธ๋ฑ์ค์ ํน์ง์ ์ผ์ชฝ ๊ฐ์ ๊ธฐ์คํด์(Left-most) ์ค๋ฅธ์ชฝ ๊ฐ์ด ์ ๋ ฌ๋์ด ์ ์ฅ๋๋ค๋ ๊ฒ์ด๋ค.
๋๋ฌธ์ LIKE '%mer'
๊ฐ์ด ์ผ์ชฝ ๊ฐ์ด ๊ณ ์ ๋์ง ์์ ๋น๊ต ์กฐ๊ฑด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ์์
๋ฒ์ ๊ฒฐ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.(๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฒดํฌ ์กฐ๊ฑด์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์๋ ์์)
NOT-EQUAL๋ก ๋น๊ต๋ ๊ฒฝ์ฐ
WHERE column <> 'N'
WHERE column NOT IN ('N', 'M')
WHERE column IS NOT NULL
LIKE '%??'(๋ท ๋ถ๋ถ ์ผ์น)๋ก ๋น๊ต๋ ๊ฒฝ์ฐ
WHERE column LIKE '%mer'
WHERE column LIKE '_mer'
WHERE column LIKE '%mer%'
์คํ ์ด๋ ํจ์๋ ๋ค๋ฅธ ์ฐ์ฐ์๋ก ์ธ๋ฑ์ค ์ปฌ๋ผ์ด ๋ณํ๋ ํ ๋น๊ต๋ ๊ฒฝ์ฐ
WHERE SUBSTRING(column, 1, 1) = 'X'
WHERE DAYOFMONTH(column) = 1
NOT-DETERMINISTIC ์์ฑ์ ์คํ ์ด๋ ํจ์๊ฐ ๋น๊ต ์กฐ๊ฑด์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ
WHERE column = deterministic_function()
๋ฐ์ดํฐ ํ์ ์ด ์๋ก ๋ค๋ฅธ ๋น๊ต
WHERE char_column = 10
๋ฌธ์์ด ๋ฐ์ดํฐ ํ์ ์ ์ฝ๋ ์ด์ ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
WHERE utf8_bin_char_column = euckr_bin_char_column
์ฐธ๊ณ ์๋ฃ