๐ DB Indexing์ด๋?
RDBMS์์ ๊ฒ์์๋๋ฅผ ๋์ด๊ธฐ ์ฌ์ฉํ๋ ํ๋์ ๊ธฐ์ .
INDEX๋ ์์ธ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํจ. ํด๋น TABLE์ ์ปฌ๋ผ์ ์์ธํ(๋ฐ๋ก ํ์ผ๋ก ์ ์ฅ)ํ์ฌ ๊ฒ์์ ํด๋น TABLE์ ๋ ์ฝ๋๋ฅผ full scan ํ๋๊ฒ ์๋๋ผ ์์ธํ ๋์ด์๋ INDEX ํ์ผ์ ๊ฒ์ํ์ฌ ๊ฒ์์๋๋ฅผ ๋น ๋ฅด๊ฒ!
๐ Index์ ์ข ๋ฅ?
- B(Balanced)+tree Index
- Bitmap Index
- IOT Index
- Clustered Index
- ์ฃผ๋ก B+tree ๊ตฌ์กฐ๋ก ์ฌ์ฉ๋จ!
๐ B+tree ๊ตฌ์กฐ๊ฐ ๋ญ๊น.......?^^
๐ฉ B+Tree๊ตฌ์ฑ
- ๋ฃจํธ๋ ธ๋: ๊ฒฝ๋ก์ ์ถ๋ฐ์ ๋ ธ๋
- ๋ ผ๋ฆฌ๋ ธ๋: ๋ฆฌํ ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก ์ญํ ์ ํ๋ ๋ ธ๋
- ๋ฆฌํ๋ ธ๋: ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ ธ๋
- B+Tree๋ ๋ฆฌํ ๋ ธ๋์ ์ด๋ฅด๊ธฐ๊น์ง ์์ ๋ ธ๋์ ๋ํ ํฌ์ธํฐ๊ฐ ์ ์ฅ๋์ด ์์ด ํ์์ ์์ด ๋ฃจํธ ๋ ธ๋์์ ์ด๋ค ๋ฆฌํ๋ ธ๋์ ์ด๋ฅด๋ ํ ๊ฐ์ ๊ฒฝ๋ก๋ง ๊ฒ์ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ฒ์์ ์์ด ๋งค์ฐ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๐ ์ ์ฌ์ฉํด์ผํ์ง?
-> ๊ฒ์ ์๋๋ฅผ ๋์ฌ์ฃผ๋๊น! ์ฐ๋ฆฌ๊ฐ ์ฑ ์์ ์ํ๋ ํ์ด์ง๋ฅผ ์ฐพ์ ๋์๋ ์์ธ ๋ชฉ๋ก์ ํ์ธํ๋ ์ด์ ๋ ๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋จ. ๊ฒ์์๋๋ฅผ ๋์ฌ์ฃผ์ด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ด๋ฆฌ, ๊ฒ์ ํ ์ ์๊ฒ ๋์์ฅผ! ๋์ข์ง...๐
- ์๋ฅผ ๋ค์ด, ์ ํ ์ด๋ธ์ Physics๊ฐ์ ์กฐํํ๋ค๊ณ ํด๋ณด์ฅ!
- select ์ ์ ํ์ฉํด์ ์กฐํํ๊ฑฐ๋ or ์ด๋ ์์น์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ Table Full scan์ ์งํํ ๊ฒ์.
- ๊ทผ๋ฐ ๋ง์ฝ์ ์์ญ๋ง๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋๋ฐ, ๊ฒ์์ ์์ฃผ ํด์ผํ๋ ์ํฉ์ด ๊ณ์ ๋ฐ์ํ๋ค๋ฉด ์ง์ง ์ง์ฆ๋๊ฒ์ฐ....
- ๊ทธ๋๊น ์์ ๊ฐ์ด ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ก ์์ฑํด์ ํด๋น ๋ฐ์ดํฐ๋ง ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๊ฒ ๋จ์ผ๋ก์จ ์ฑ๋ฅํฅ์์ ๊ธฐ๋ํ๋ ๊ฒ์ด์ผ...๐
๐ ์ด๋ป๊ฒ ๋์ํ๋๋ฐ?
- ํด๋น ํ ์ด๋ธ์ ์์ฑ์ ์์ฑํ๊ณ ์ถ์ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์ง์
- ์์ฑ ํ ์ธ๋ฑ์ค ์กฐํ ์, WHERE ์ ์ด ํฌํจ๋ ์ฟผ๋ฆฌ๋ก ์กฐํ
- ์ธ๋ฑ์ค๋ก ์ ์ฅ๋ Key-Value๊ฐ์ ์ฐธ์กฐํด์ ๊ฒฐ๊ณผ ์ถ๋ ฅ
๐ ์๋ฅผ ๋ค์ด๋ณผ๊ฒ!
์์)
- ์ฌ์ ํ ์ด๋ธ์ ์ด 50๋ช ์ด ์๊ณ , ๋จ์ 25๋ช , ์ฌ์ 25๋ช
์ฌ์ ์ค ์ด๋ฆ์ด '์ ๊ด์'์ธ ์ฌ๋์ด 2๋ช
์ฌ์ ํ ์ด๋ธ์์ ์ฑ๋ณ์ด '์ฌ์' ์ด๊ณ ์ด๋ฆ์ด '์ ๊ด์'์ธ ์ฌ๋์ ์ฐพ์ ๋ :
SQL > SELECT ์ด๋ฆ, ์ฑ๋ณ FROM ์ฌ์ WHERE ์ฑ๋ณ = '์ฌ์' AND ์ด๋ฆ = '์ ๊ด์';- ๊ฒฐํฉ ์ธ๋ฑ์ค ์์ฑ ๊ตฌ๋ฌธ ์ (์ค๋ณต์ ํ์ฉํ์ง ์๋ ์์) :
CREATE UNIQUE INDEX [์ธ๋ฑ์ค๋ช ] ON [ํ ์ด๋ธ๋ช ]([์ปฌ๋ผ๋ช 1][์ ๋ ฌ๊ธฐ์ค], [์ปฌ๋ผ๋ช 2][์ ๋ ฌ๊ธฐ์ค], ...) SQL > **CREATE UNIQUE INDEX** idx_์ฌ์_์ฑ๋ณ_์ด๋ฆ 2 **ON** ์ฌ์(์ฑ๋ณ,์ด๋ฆ);
- ๊ฒฐํฉ ์ธ๋ฑ์ค ์์ฑ์ ์ปฌ๋ผ์ ๋ฐฐ์น ์์
case 1 : ON ์ฌ์(์ฑ๋ณ, ์ด๋ฆ)
50 ๋ช -> ์ฌ์ -> 25๋ช -> ์ ๊ด์ -> 2๋ช
50 => 25ํ ๊ฒ์ฌ
case 2 : ON ์ฌ์(์ด๋ฆ, ์ฑ๋ณ)
50๋ช -> ์ ๊ด์ -> 2๋ช -> ์ฌ์ -> 2๋ช
50 => 2ํ ๊ฒ์ฌ
=> ๊ฐ์ ํ ์ด๋ธ์ ๊ฐ์ SQL์ด์ง๋ง ๊ฒฐํฉ ์ธ๋ฑ์ค๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋๊ฐ์ ๋ฐ๋ผ ์๋๋ ๊ฒ์ฌ ํ์๊ฐ ์์ ํ ๋ฌ๋ผ์ง๊ฒ ๋๋ค. (์ ์คํ ์์ฑ...)
๐ ๊ทธ๋ผ ์ธ์ ์ฌ์ฉํ๋๋ฐ?
- ๋ฐ์ดํฐ์ ์์ด ๋ง๊ณ ๊ฒ์์ด ๋ณ๊ฒฝ๋ณด๋ค ์ฆ์ ๊ฒฝ์ฐ(๊ฒ์>>>>>๋ณ๊ฒฝ)
๊ธฐ๋ณธ์ ์ผ๋ก ์ด์ง ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด์๋ ์ํ์์ ์ถ๊ฐ, ์์ , ์ญ์ ๊ฐ ์์ฃผ ์ผ์ด๋๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋น ๋์๋ค์ด ์ํ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์.
์๋ฅผ ๋ค์ด, ํ ์ผํ๋ชฐ์ ์ฌ๋ฌ๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ๊ฐ ์กด์ฌํ ๋ ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ์ํ๋ค์ ์กฐํํ ๋ ์ด๋ฌํ ์ธ๋ฑ์ค ๊ธฐ๋ฅ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ํฐ ํจ์จ์ ๋ฐํํ๊ฒ ๋์ง๋ง, ์ธ์คํ๊ทธ๋จ๊ฐ์ ์์ ์๋น์ค๋ค์ ๋์์์ด ๊ฒ์๊ธ์ด ์์ฑ๋๊ณ ์์ , ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ์ธ๋ฑ์ฑ์ ํ๊ฒ๋๋ฉด ์์ฒญ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ปฌ๋ผ์ ๊ฐ์ด ๋ค์ํ ๊ฒฝ์ฐ.
- ์ฃผ๋ก ๊ฒ์ ๋ฐ ์กฐํ๋ฅผ ํ ๋.
๐ Indexing์ ์ฅ์
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ Input, output ์์ ์ด ๋ง์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ๊ตฌ์กฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ ์ด์ ๋งํผ ์ ๊ทผํ ํ์๊ฐ ์์.
- ์ ์ ์๊ฒ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ํด ๋ ๋น ๋ฅด๊ฒ ์ ๊ณต.
- ํ ์ด๋ธ ํ์ ์ฐ๊ฒฐ์ ํ ํ์๊ฐ ์์ด ํ ID๋ฅผ ์ธ๋ฑ์ค์ ์ ์ฅํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ด๋ธ ๊ณต๊ฐ์ด ์ค์ด๋ฆ.
- ๊ธฐ๋ณธ ํค์ ๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํ ์ ์์.
๐ Indexing์ ๋จ์
- ์ธ๋ฑ์ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ๋ํฌํ ๊ฐ์ ์ง๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๊ฐ ํ์ํจ.
- ์ธ๋ฑ์ค ๋ ๋ฐ์ดํฐ์์ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์.
- ์ธ๋ฑ์ค๋ก ์ ๋ฆฌ๋ ํ ์ด๋ธ์ ๋ถํ ํ ์ ์์.
- SQL ์ธ๋ฑ์ฑ์ CRUD ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๊ฐ์์ํด.
๐ ์ถ์ฒ1: https://velog.io/@bsjp400/Database-DB-%EC%9D%B8%EB%8D%B1%EC%8B%B1Indexing%EC%9D%B4%EB%9E%80
๐ ์ถ์ฒ2: https://lalwr.blogspot.com/2016/02/db-index.html