์์ฐจ I/O, ๋๋ค I/O
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ, ์ธ๋ฑ์ค ํ ์ค์บ
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค, ๋ ผ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
B-Tree Index, Hash Index
Hint
๊ธฐ๋ณธ์ ์ผ๋ก ๋์คํฌ ๋๋ผ์ด๋ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ํ ํ๋ํฐ๋ฅผ ํ์ ํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
์์ฐจ I/O๋ ๋ ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์์๋ฅผ ๋ฐ๋ผ ์ฐจ๋ก๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋๊ฐ๋ ๋ฐฉ์๋๋ค I/O๋ ๋ ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์์๋ฅผ ๋ฐ๋ฅด์ง ์๊ณ ํ ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ํด ํ ๋ธ๋ก์ฉ ์ ๊ทผํ๋ ๋ฐฉ์
๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ฝ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋์คํฌ ํค๋๋ฅผ ์์ง์ฌ์ ์ฝ๊ณ ์ธ ์์น๋ก ์ฎ๊ธฐ๋ ๋จ๊ณ์์ ๊ฒฐ์ ๋๋ค. ๋ฐ๋ผ์ ๋ณดํต ์์ฐจ I/O ๊ฐ ๋๋ค I/O ๋ณด๋ค ๋น ๋ฅด๋ค๊ณ ๋ณผ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ ํ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ผญ ํ์ํ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ฌ ๋๋ค I/O ์์
์ ์ค์ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ์์ฐจ I/O๋ก ๋ฐ๊ฟ์ ์คํํ ๋ฐฉ๋ฒ์ด ์ ๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ๋๋ค I/O๋ฅผ ์ฌ์ฉํ ํ ์ด๋ธ ์ค์บ์ ์์ฐจ I/O๋ฅผ ์ฌ์ฉ- ๋งค์ฐ ํฐ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋๋ ํ ํ ์ด๋ธ ์ค์บ์ ์ฌ์ฉํ๋ค. (ex. ๋ฐ์ดํฐ ์จ์ด ํ์ฐ์ค, ํต๊ณ ์์ )
์ธ๋ฑ์ค๋ DBMS์ ์ ์ฅ ์ฑ๋ฅ์ ํฌ์ํ๊ณ ๊ฒ์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ๋ง๋ค์ด์ง ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
์ธ๋ฑ์ค์ ๋ชฉ์ RDBMS์ ๊ฒ์ ์๋๋ฅผ ๋์ด๋๋ฐ ์๋ค.
Index๋ฅผ ํด๋น ์ปฌ๋ฌ์ ์ฃผ๊ฒ ๋๋ฉด ์ด๊ธฐ Table ์์ฑ์, FRM,MYD,MYI 3๊ฐ์ ํ์ผ์ด ๋ง๋ค์ด์ง๋ค.
- FRKM: ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ์ ์ฅ๋์ด ์๋ ํ์ผ
- MYD: ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ํ์ผ
- MYI: Index ์ ๋ณด๊ฐ ๋ค์ด์๋ ํ์ผ
index๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ, MYI ํ์ผ์ ๋น์ด์ ธ ์๋ค. ๊ทธ๋ฌ๋ index๋ฅผ ํด๋น ์ปฌ๋ผ์ ๋ง๋ค๊ฒ ๋๋ฉด ํด๋น ์ปฌ๋ผ์ ๋ฐ๋ก ์ธ๋ฑ์ฑํ์ฌ MYI ํ์ผ์ ์ ๋ ฅํ๋ค.
์ดํ์ ์ฌ์ฉ์๊ฐ SELECT ์ฟผ๋ฆฌ๋ก index๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ ์ ํด๋น Table์ ๊ฒ์ํ๋ ๊ฒ์ด ์๋๋ผ MYI ํ์ผ์ ๋ด์ฉ์ ๊ฒ์ํ๋ค.
- ํค ๊ฐ์ ๊ธฐ์ด๋ก ํ์ฌ ํ ์ด๋ธ์์ ๊ฒ์๊ณผ ์ ๋ ฌ ์๋๋ฅผ ํฅ์์ํจ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ ํ์ ๊ณ ์ ์ฑ์ ๊ฐํ์ํฌ ์ ์๋ค.
- ์ ๋ฐ์ ์ธ ์์คํ ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
- ์ฌ์ฉ์๊ฐ ํ ํ์ด์ง๋ฅผ ๋์์ ์์ ํ ์ ์๋ ๋ณํ์ฑ์ด ์ค์ด๋ ๋ค.
- ์ธ๋ฑ์ค๋ ํ๋์์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ(UPDATE)ํ๊ฑฐ๋ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐ(INSERT) ๋๋ ์ญ์ (DELETE) ํ ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. (DML์ ์ทจ์ฝ)
Insert- indext split : ์ธ๋ฑ์ค์ Block๋ค์ด ํ๋์์ ๋๊ฐ๋ก ๋๋์ด์ง๋ ํ์.
- ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๊ฐ ์์๋๋ก ์ ๋ ฌ๋์ด์ผ ํ๋ค. ๊ธฐ์กด ๋ธ๋ก์ ์ฌ์ ๊ณต๊ฐ์ด ์๋ ์ํฉ์์ ๊ทธ ๋ธ๋ก์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ด์ผ ํ ๊ฒฝ์ฐ, ์ค๋ผํด์ด ๊ธฐ์กด ๋ธ๋ก์ ๋ด์ฉ ์ค ์ผ๋ถ๋ฅผ ์ ๋ธ๋ก์๋ค๊ฐ ๊ธฐ๋กํ ํ, ๊ธฐ์กด ๋ธ๋ก์ ๋น ๊ณต๊ฐ์ ๋ง๋ค์ด์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ค.
- Index split์ ์๋ก์ด ๋ธ๋ก์ ํ ๋น๋ฐ๊ณ Key๋ฅผ ์ฎ๊ธฐ๋ ๋ณต์กํ ์์ ์ ์ํํ๋ค. ๋ชจ๋ ์ํ ๊ณผ์ ์ด Redo์ ๊ธฐ๋ก๋๊ณ ๋ง์ ์์ Redo๋ฅผ ์ ๋ฐํ๋ค.
- Index split์ด ์ด๋ฃจ์ด์ง๋ ๋์ ํด๋น ๋ธ๋ก์ ๋ํด ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋๋ฏ๋ก DML์ด ๋ธ๋กํน๋๋ค.
Delete- ndex์์ ๋ฐ์ดํฐ๊ฐ delete๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ์ง์์ง์ง ์๊ณ ์ฌ์ฉ ์๋จ ํ์๋ง ํด๋๋ค.
- ์ฆ, ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ 1๋ง๊ฑด ์๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์๋ 2๋ง๊ฑด์ด ์์ ์ ์๋ค๋ ๋ป์ด๋ค.
Update- ํ ์ด๋ธ์ update๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์์๋ delete๊ฐ ๋จผ์ ๋ฐ์ํ ํ ์๋ก์ด ์์ ์ insert ์์ ์ด ๋ฐ์ํ๋ค.
- delete์ insert ๋ ๊ฐ์ ์์ ์ด ์ธ๋ฑ์ค์์ ๋์์ ์ผ์ด๋ ๋ค๋ฅธ DML๋ณด๋ค ๋ ํฐ ๋ถํ๋ฅผ ์ฃผ๊ฒ ๋๋ค
- ์ธ๋ฑ์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต๊ฐ์ ์ฐจ์งํด ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ด ํ์ํด์ง๋ค. (๋ฐ์ดํฐ๋ฒ ์ด์ค์ 10% ๋ด์ธ์ ๊ณต๊ฐ์ด ์ถ๊ฐ๋ก ํ์)
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ด ์์ฃผ ์ผ์ด๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์์ฑํด์ผ ํ ํ์๊ฐ ์๊ธฐ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น ์ ์๋ค.
-
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ- ์ธ๋ฑ์ค ๋ฃจํธ ๋ธ๋ก์์ ๋ฆฌํ ๋ธ๋ก๊น์ง ์์ง์ ์ผ๋ก ํ์ํ ํ์ ๋ฆฌํ ๋ธ๋ก์ ํ์ํ ๋ฒ์๋ง ์ค์บํ๋ ๋ฐฉ์
- B Tree ์ธ๋ฑ์ค์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ์ค ๋ฐฉ์
- ๋ฃจํธ ๋
ธ๋ -> ๋ธ๋์น ๋
ธ๋ -> ๋ฆฌํ ๋
ธ๋ ์์ผ๋ก ํ์
- ๋ฆฌํ ๋ ธ๋์์ ์์ํ ์ง์ ์ ์ฐพ์ผ๋ฉด, ๊ทธ ๋ค์๋ถํฐ๋ ๋ฆฌํ ๋ ธ๋์ ๋ ์ฝ๋๋ง ์์๋๋ก ์ฝ์ผ๋ฉด ๋๋ค.
- ๋ฆฌํ ๋ ธ๋์ ๋๊น์ง ์ฝ์ผ๋ฉด ๋ฆฌํ ๋ ธ๋๊ฐ์ ๋งํฌ๋ฅผ ํตํด ๋ค์ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ์์ ์ค์บํ๋ค.
- ์ต์ข
์ ์ผ๋ก ์ค์บ ์ข
๋ฃ ์ง์ ์ ์ฐพ์ผ๋ฉด ์ง๊ธ๊น์ง ์ฝ์ ๋ ์ฝ๋๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ข
๋ฃํ๋ค.
- ๋ฐ์ดํฐ ํ์ผ์์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ฌ ๋ ๋ ์ฝ๋ ํ๊ฑด๋ง๋ค ๋๋คI/O๊ฐ ๋ฐ์ํ๋ค.
- ๊ทธ๋์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์ ์ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค๊ณ ํ๋ ๊ฒ์ด๋ค.
- ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฒด์ 20%~25%๋ฅผ ๋์ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ ์ด๋ธ ์ค์บ ๋ฐฉ์์ด ๋ ํจ์จ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋๋ค.
- ์ฃผ๋ก, <, >, IS NULL, BETWEEN, IN, LIKE ๋ฑ์ ์ฐ์ฐ์ ์ด์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉ๋๋ค.
-
์ธ๋ฑ์ค ํ ์ค์บ- ์์ง์ ํ์ ์์ด ์ธ๋ฑ์ค ๋ฆฌํ ๋ธ๋ก์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ์
- ๋ํ์ ์ผ๋ก ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ด ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํ ์ค์บ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ณด๋ค ํจ์ฌ ์๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค ๋น ๋ฅธ ๋ฐฉ์์ด๋ค.
- ์ธ๋ฑ์ค ์ ๋์ปค๋ผ์ด ์กฐ๊ฑด์ ์ ์์ผ๋ฉด ์ตํฐ๋ง์ด์ ๋ ์ฐ์ ์ ์ผ๋ก Table Full Scan์ ๊ณ ๋ คํ๋ค.
- Table Full Scan ๋ถ๋ด์ด ํฌ๋ค๋ฉด ์ตํฐ๋ง์ด์ ๋ ์ฐจ์ ์ผ๋ก Index Full Scan์ ์ ํํ๋ค.
-
Full Table Scan- ํ ์ด๋ธ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋ฉด์ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด ๊ฒฐ๊ณผ๋ก ์ถ์ถํ๊ณ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ก๋ค์ ์๋ก ์ธ์ ๋์ด ์๊ธฐ ๋๋ฌธ์, Full Table Scan์ ํ๋ฒ์ I/O์ ์ฌ๋ฌ ๋ธ๋ก์ ์ฎ๊ฒจ์จ๋ค.
- ์ฆ ํ๋ฒ์ I/O์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ค ๋ธ๋ก ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์, row ๋น ์์๋๋ ์ ์ถ๋ ฅ ๋น์ฉ์ด ์ธ๋ฑ์ค ์ค์บ์ ๋นํด ์ ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ฎ๊ฒจ์ง ๋ธ๋ก๋ค์ ์์ฐจ์ ์ผ๋ก ์ฝํ๋ค.
- ํ
์ด๋ธ์ ๊ธฐ๋ณธํค(PK)์ ๋ํด ์ ์ฉ๋๋ ์ธ๋ฑ์ค
- ํ ์ด๋ธ ๋น ์ค์ง ํ๊ฐ๋ง ์กด์ฌ
- ํ
์ด๋ธ์ ์ฝ์
๋๋ ์์์ ์๊ด์์ด
Index๋ก ์์ฑ๋์ด ์๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด ์ฝ์ ๋๋ค.- ์ค๊ฐ์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๋ค๋ฉด ์ดํ์ ๋ชจ๋ ์ปฌ๋ผ์ ํ ์นธ์ฉ ์ด๋์์ผ์ค์ผํ๋ค. (index๊ฐ ๊ตฐ์งํ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค. )
- ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ ์ํด ๋ ์ฝ๋์ ์ ์ฅ์์น๊ฐ ๊ฒฐ์ ๋๋ฉฐ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น ๋ํ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
- Clustered Index ๊ตฌ์กฐ
- Leaf Level๊ณผ Data Page๊ฐ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค. (๋ณ๋์ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์๋๋ค. )
- Data Page์ ๋ฐ์ดํฐ๋ค์ด ์์ฐจ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค.
- Clustered Index๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์์ด ๊ฒ์ ์๋๊ฐ Non-Clustered Index๋ณด๋ค ๋ ๋น ๋ฅด๋ค.
- ๋ฐ์ดํฐ์ ์ ๋ ฅ/์์ /์ญ์ ์์๋ ์ ๋ ฌ์ ์ํํ์ฌ ์ ๋ ฅ/์์ /์ญ์ ์๋๋ ๋ ๋๋ฆฌ๋ค.
- ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค ์ธ์ ๋ค๋ฅธ ์ปฌ๋ผ์ ์ ์ฉ๋ ์ธ๋ฑ์ค
- ํ ์ด๋ธ ๋น ์ฌ๋ฌ๊ฐ์ด ์ธ๋ฑ์ค ์์ฑ ๊ฐ๋ฅ
- ๋ ผ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์ ์ฅ ๋ ๋ฌผ๋ฆฌ์ ์ธ ์์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ์ง ์๋๋ค. ์ฆ, ์์๋๋ก ์ ๋ ฌ๋์ด ์์ง ์๋ค.
- ๋
ผ ํด๋ฌ์คํฐ ํ ์ธ๋ฑ์ค๋ ํ
์ด๋ธ ๋ฐ์ดํฐ์ ํจ๊ป ํ
์ด๋ธ์ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ ๋ณ๋์ ์ฅ์์ ์ ์ฅ๋๋ค.
- ํ ์ด๋ธ์ ID ํค ๊ฐ๊ณผ ํฌ์ธํฐ์ธ Address๋ฅผ ํตํด ์ค์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ค.
- Non-Clustered Index ๊ตฌ์กฐ
- B-Tree ์ ๋ฆฌํ ๋ ธ๋ ์ฒ๋ผ ๋ ธ๋ ์์ฒด๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋๊ณ , ๋ฆฌํ ๋ ธ๋์์๋ ๋ฐ์ดํฐ๊ฐ ์์นํ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํํ.
- Clustured ๊ตฌ์กฐ์๋ ๋ค๋ฅด๊ฒ Leaf Level๊ณผ Data Page๊ฐ ๊ตฌ๋ถ๋๋ค. ๊ทธ๋ฆฌ๊ณ Data Page์ ๋ฐ์ดํฐ๋ ์ ๋ ฌ ๋์ด์์ง ์๋ค.
-
ํธ๋ฆฌ์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ๋ฐ์ดํฐ ์ ๊ทผ ํผํฌ๋จผ์ค๊ฐ ๋ฐ์ดํฐ ์ฆ๊ฐ๋์ ๋ฐ๋ผ์ ๊ฒฐ์ฝ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ์ง ์๋๋ค๋ ์ ์ด๋ค.
-
B-Tree๋ ์ด์งํธ๋ฆฌ์ ๋ค๋ฅด๊ฒ ํ๋์ ๋ ธ๋์ ๋ง์ ์์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์๋ค. ์ต๋ M๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋ B Tree๋ฅผ M์ฐจ B-Tree๋ผ๊ณ ํ๋ค.
-
์ด์ง ๊ฒ์ ํธ๋ฆฌ์ฒ๋ผ ๊ฐ key๋ค์ ์ผ์ชฝ ์์๋ค์ ํญ์ key๋ณด๋ค ์์ ๊ฐ์, ์ค๋ฅธ์ชฝ ๊ฐ์ ํฐ ๊ฐ์ ๊ฐ์ง๋ค.
-
์ปฌ๋ผ์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋์ ๊ฐ์ ์ด์ฉํด ์ธ๋ฑ์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ
-
Root Node, Branch Node(์ค๊ฐ ๋ ธ๋), Leaf Node๋ก ๊ตฌ์ฑ
-
Root Node์ Branch Node๋
์ธ๋ฑ์ค ๋ ์ฝ๋์์์ ๋ ธ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ Leaf Node๋์ธ๋ฑ์ค ๋ ์ฝ๋์๋ ์ฝ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. -
Leaf Node ์ ๋ ์ฝ๋ ์ฃผ์๋ ์ค์ ํ ์ด๋ธ์ ์ ์ฅ๋์ด ์๋ ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
| ๊ตฌ๋ถ | B-Tree | B+Tree |
|---|---|---|
| ๋ฐ์ดํฐํฌ์ธํฐ | ๋ชจ๋ ๋ด๋ถ์ ์ธ ๋ ธ๋๋ค์ ๋ฐ์ดํฐ ํฌ์ธํฐ๋ฅผ ์ง๋ | ๋ฆฌํ ๋ ธ๋์๋ง ๋ฐ์ดํฐ ํฌ์ธํฐ๊ฐ ์กด์ฌ |
| ์ํ์ ์์ธ์ค ํ์ ๋ฐฉ์ | ๋ชจ๋ key๊ฐ ๋ฆฌํ๋ ธ๋์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํด์ผ ํจ | ๋ชจ๋ key๊ฐ ๋ฆฌํ๋ ธ๋์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํ ๋ ธ๋ ๋ ๋ฒจ์์ ํ์ํ๋ฉด ๋จ |
| ํค ์ค๋ณต์ฌ๋ถ | ๋ชจ๋ ๋ ธ๋๋ ์๋ก ๋ค๋ฅธ key๋ฅผ ์ง๋ | ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ ๊ฐ์ key๋ฅผ ๊ฐ์ง ์ ์์ |
| ๋งํฌ๋ ๋ฆฌ์คํธ | ์กด์ฌํ์ง ์์ | ๋ฆฌํ ๋ ธ๋๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐ๋์ด ์์ |
- ํด์ ์ธ๋ฑ์ค๋ InnoDB ์์ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค(Adaptive Hash Index)๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๊ณ , ์ค๋ผํด์์๋ ์กฐ์ธ์ ์ฌ์ฉ๋๋ค.
- B-Tree ์ธ๋ฑ์ค์ ๋ฌ๋ฆฌ ๋ฒ์ผ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ ์ฃผ๋ฉด ํด์ ํจ์๋ฅผ ๊ฑฐ์ณ์ ์ฐพ๊ณ ์ ํ๋ ํค๊ฐ์ด ํฌํจ๋ ๋ฒ์ผ(Bucket)์ ์์๋ผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฒ์ผ ํ๋๋ง ์ฝ์ด์ ์ค์ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ๋ฐ๋ก ์ฐพ์ ์ ์๋ค.
- Hash index ๋ ์๋์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด ์๋ ํด์ ํจ์์ ๊ฒฐ๊ณผ๋ง์ ์ ์ฅํ๊ฒ ๋จ์ ๋ฐ๋ผ ํค ์ปฌ๋ผ ๊ฐ์ 4~8๋ฐ์ดํธ ์ ๋๋ก ์์ ๊ธธ์ด๋ก ์ค์ด ๋ค๊ฒ ๋๊ณ B-Tree ์ธ๋ฑ์ค์ ๋นํด ์๋นํ ์์ ํฌ๊ธฐ ์ด๋ค.
- ์ ๋ ฅํ ๊ฐ์ด ๋ค๋ฅด์ง๋ง ํด์๋ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.ํด์ ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฒ์๊ฐ ์ข์ผ๋ฉด ํ์ํ ๋ฒ์ผ์ ๊ฐ์๊ฐ ์ ์ด์ง๊ฒ ๋๋ฉด์ ์ถฉ๋ํ ์ ์๋ ํ์จ์ด ๋๊ฒ ๋๋ค. Hash index ์์ ์ถฉ๋์ด ๋ง์ด ๋ฐ์ ๋ ์๋ก ๊ฒ์ ํจ์จ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
- Hash index ๋ ๋๋ฑ(equal =) ๋น๊ต ๊ฒ์์ ์ฌ์ฉ ๋ฐ ์ต์ ํ ๋์ด ์์ผ๋ฉฐ ๋ฒ์๋ FullText Search ๋ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ชฉ์ ์ผ๋ก๋ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
- SELECT ์ง์ ์กฐ๊ฑด์๋ ๋ถ๋ฑํธ ์ฐ์ฐ(<>)๋ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ๋ถ๋ฑํธ ์ฐ์ฐ ์ฌ์ฉ ์ ๋ฌธ์ ๋ฐ์ํ ์ ์๋ค.
- InnoDB ๋ B-Tree ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฝ์ผ๋ก ์ธํ ์์ ์ฌ์ฉ ํจ์จ์ด ๋จ์ด์ง๋ ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด์ InnoDB Adative Hash Index ๊ธฐ๋ฅ์ ๋์ ํ๋ค.
- ์์ฃผ ์ฌ์ฉ๋๋ ์์์ ํด์๋ฅผ ํตํด์ ์ง์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์, ๋ด๋ถ์ ์ธ ๋ฝ(์ด๋ฅผํ ๋ฉด Mutex)์ผ๋ก ์ธํ ์ง์ฐ์ด ์ค์ด๋ ๋ค.
- ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๊ฐ๋ง ๋ด๋ถ์ ์ผ๋ก ํ๋จํ์ฌ ์ํฉ์ ๋ง๊ฒ ํด์ ๊ฐ์ ์์ฑํ๋ค.
- ๋จ ์์ฃผ ์ฌ์ฉ๋๋ ์์ ๋ง์ ํด์๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์, SELECT๋ก ์ธํ์ฌ ๋ฐ๋์ ํด๋น ์์์ ํฅํ ์ง์ ์ ์ธ ํด์ ๊ฐ์ด ๋ง๋ค์ด์ง์ง ์๋๋ค.
- ๋น๋ฒํ ๋ฐ์ดํฐ ์ ๊ทผ์ด ๋ง์ ํ๊ฒฝ์์๋ ๋๋จํ ํจ์จ์ด ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด์๋ค. ๊ทธ๋ฌ๋, ์ฃผ์๋ฅผ ํด์ผํ ์ ์ ์ค๋๋ ํ ์ด๋ธ์ธ ๊ฒฝ์ฐ์๋ ํด์๊ฐ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์์ ์ ์์ผ๋ฉฐ, ์ด์ ๋ํ ์ ์ด๋ ๋ถ๊ฐํ๋ค.
- SQL ๋ฌธ์ฅ์ ํน๋ณํ ํค์๋๋ฅผ ์ง์ ํ์ฌ ์ตํฐ๋ง์ด์ ์๊ฒ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ด ํจ๊ณผ์ ์ธ์ง ์๋ ค์ฃผ๋ ํค์๋๋ฅผ ์๋ฏธํ๋ค.
- Hint ๋ ์ตํฐ๋ง์ด์ ์๊ฒ ์ํฅ์ ๋ฏธ์น๋ค. ๋ฐ๋ผ์ Hint ๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ SQL ์ ์์์ ์ต์ ํ ํด์ฃผ๋ ๊ฒ์ ๋ณธ์ธ์ด ๋ง์น๋ ์ ์ด ๋ ์๋ ์๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
- SQL ๋ฌธ์ฅ์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์
- SELECT * FROM member USE INDEX (PRIMARY) WHERE id = 1001;
- ์ฃผ์ ํ๊ธฐ ๋ฐฉ์
- SELECT * FROM member /*! USE INDEX (PRIMARY) */ WHERE id = 1001;
Oracle ๊ณผ ๊ฐ์ ๋ค๋ฅธ DBMS ๋ค์ Hint ๋ฅผ ์ฃผ์์ผ๋ก ํด์ํ๋๋ฐ, MySQL ์ SQL ์ ์ผ๋ถ๋ก ํด์ํ๊ธฐ ๋๋ฌธ์ ์ ๋ชป ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.