Index
in DB
๐ก Database์์ Index๋?
์ธ๋ฑ์ค๋ โ์ถ๊ฐ์ ์ธ ์ฐ๊ธฐ ์์ ๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ
ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐโ์ด๋ค. ์ด๋ฌํ ์ธ๋ฑ์ค๋ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ง
์๋ณธ ํ ์ด๋ธ์ ์ฌ๋ณธ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
๋ง์ฝ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ปฌ๋ผ์ ์กฐํํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ์ ์ฒด๋ฅผ ํ์ํ๋ Full Scan์
์ํํด์ผ ํ๋ค. ์ด ๋ฐฉ๋ฒ์ DB ์ ์ฒด๋ฅผ ๋น๊ตํ์ํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋จ์ด์ง๋ค.
๋ํ CREATE, DELETE, UPDATE๊ฐ ๋น๋ฒํ ์์ฑ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ๋น๋ํด์ ธ์
์ฑ๋ฅ์ด ์คํ๋ ค ์ ํ๋๋ ์ญํจ๊ณผ๋ฅผ ๋ฐ์ํ ์ ์๋ค.
์ ๋ฆฌํด๋ณด์๋ฉด, ์ธ๋ฑ์ค๋ โ๊ฒ์โ์ ์ต์ ํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์์ฑ, ์ญ์ธ, ์์ ์ด ์์ฃผ ์ผ์ด๋๋
ํ ์ด๋ธ์์๋ ์ฌ์ฉ์ ์ํ๋ ํธ์ด ์ข์๊ฒ ๊ฐ๋ค.
๐ก Index์ ๋์์๋ฆฌ
โ Index Table(์๋ณธ ํ ์ด๋ธ์ ์ฌ๋ณธ)์์ where์ ์ ํฌํจ๋ ๊ฐ์ ์ฐพ๋๋ค.
โ ํด๋น ๊ฐ์ id ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
โ ๊ฐ์ ธ์จ id๊ฐ์ผ๋ก ์๋ณธ ํ ์ด๋ธ์์ ๊ฐ์ ์กฐํํ๋ค.
์๋ ์ฌ์ง์ ๋ณด๋ฉด Indexes์ Index Table์ด ์์ฑ๋๊ฑธ ํ์ธ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ฟผ๋ฆฌ๋ฌธ์ ์๋์ ๊ฐ์ด ์์ฑํ์์ ๋
SELECT * FROM table WHRER user_id=โJohnโ
Index๊ฐ ์๋ ๊ฒฝ์ฐ John์ด ์ด๋ค ๋ธ๋ก์ ๋ค์ด ์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ db buffer cache
๋ก
๋ณต์ฌํ ํ ํ๋ํ๋ ์ฐพ๋๋ค. ๋ฐ๋ฉด Index๊ฐ ์๋ ๊ฒฝ์ฐ where์ ์ ์ปฌ๋ผ(user_id)์ index๊ฐ ๋ง๋ค์ด์ ธ ์๋์ง
ํ์ธ ํ, ์ธ๋ฑ์ค์ ๋จผ์ ๊ฐ์ John์ ์ ๋ณด๊ฐ ์ด๋ค ROWID๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ ํ ํด๋น ROWID์ ์๋
๋ธ๋ก๋ง ์ฐพ์๊ฐ์ db buffer cache
์ ๋ณต์ฌํ๋ค.
๐ก B-Tree
โB-Treeโ๋ Balanced Tree๋ก ๊ท ํ์ ์ ์งํ๋ tree๋ฅผ ์๋ฏธํ๋ค.
ORACLE๊ณผ ๊ฐ์ ์ฌ์ฉ DB์์ ๋ง์ด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ์ธ๋ถ๊ฒ์์ ์ ์ฉํ๋ค๊ณ ์๋ ค์ ธ ์๋ค.
B-Tree๋ ์ด์งํธ๋ฆฌ์๋ ๋ฌ๋ฆฌ ํ๋์ ๋ ธ๋๊ฐ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์ ์๋ค.
- B-Tree์ ๊ท์น
1. ๋
ธ๋์ ๋ฐ์ดํฐ ์๊ฐ N์ด๋ฉด ์์์ ์๋ ํญ์ N+1์ด ๋์ด์ผํ๋ค.
2. ๋
ธ๋ ๋ด์ ๋ฐ์ดํฐ๋ ๋ฐ๋์ ์ ๋ ฌ๋ ์ํ์ฌ์ผ ํ๋ค.
3. ๋
ธ๋์ ๋ฐ์ดํฐ X์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ X๋ณด๋ค ์์ ๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ด์ผํ๊ณ ,
X์ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ X๋ณด๋ค ํฐ ๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ด์ผ ํ๋ค.
> ์ด์งํธ๋ฆฌ์ ์ฑ์ง๊ณผ ์ ์ฌ
๐ก B+Tree
โB+Treeโ๋ B-Tree์ ํ์ฅ๊ฐ๋ ์ผ๋ก, ๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋์ง ์๊ธฐ ๋๋ฌธ์
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํ๋ณดํจ์ผ๋ก์จ ๋ ๋ง์ key๋ค์ ์์ฉํ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋์ ๋ ธ๋์ ๋ ๋ง์ key๋ค์ ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ์ ๋์ด๋ ๋ ๋ฎ์์ง๋ฉฐ,
cache hit
ํ๋ฅ ์ ๋ ๋์ผ ์ ์๋ค.
๋ํ Full Scan ์, B+tree๋ ๋ฆฌํ ๋ ธ๋์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์ ํํ์๋ง
ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ B-tree์ ๋นํด ๋น ๋ฅด๋ค. ๋ฐ๋ฉด B-tree์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ธํด์ผ ํ๋ค.
๋ฆฌํ ๋ ธ๋๋ค์ Linkedlist๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
InnoDB ๋ B+tree Index ๋ก ์ด๋ค์ ธ ์์