optimization index
Introduction
๋ค๋ค ์ ์๊ณ ์๋ค์ถ์ด, ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
์ธ๋ฑ์ค๋ ํ๋ฒ ์์ฑ๋๋ฉด ์ถ๊ฐ์ ์ธ ์กฐ์น๊ฐ ํ์์์ง๋ง, ์ฟผ๋ฆฌ ํ๋๋๊ฐ ์ข์ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ANALYZE
๋ช
๋ น์ ์คํํ์ฌ ํต๊ณ๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
ํฐ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์์คํ ์ ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๋๊ธฐํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ์ด ๊ณผ์ ์์ DB ์์ง๋ง๋ค ๋ค๋ฅด๊ฒ ์ง๋ง, ํ ์ด๋ธ์ ๋ํ ์์ ์ด ๋๋ ค์ง ์ ๋ ์๋ค.
Index Type
์ด ํฌ์คํ
์, postgres ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ์์ฑํ ๊ธ์ด๋ผ ์๋์ ๊ฐ์ด 5๊ฐ์ ์ธ๋ฑ์ค ํ์
์ ์ค๋ช
ํ๋ค. mysql ์ ๊ฒฝ์ฐ Gist
/ GIN
/ BRIN
์ index type์ ์๊ณ FULLTEXT
/ R-Tree
๊ฐ์ ๋ณ๋์ ์ธ๋ฑ์ค ํ์
์ ์ง์ํ๋ค.
B-Tree
B-tree๋ ํน์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์์๋ฅผ ๊ฐ์ง ์ฑ๋ก ์ ์ฅ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ฑ๋น๊ต๋ ๋ฒ์์ฟผ๋ฆฌ์ ๋ํด ํจ๊ณผ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ค. LIKE / ~ ๊ฐ์ ์ฐ์ฐ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ์์ธ์ฌํญ์ด ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด column like 'foo%'
column ~ '^foo'
๋ ๊ฐ๋ฅํ์ง๋ง, column like '%bar'
๋ ๊ฐ๋ฅํ์ง ์๋ค.
Hash
ํด์ฌ ํจ์๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํด์ฌ ํจ์๋ ์์์ ๊ธธ์ด์ ์ ๋ ฅ์ ๋ฐ๊ณ ๊ณ ์ ๋ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ์ฌ๊ธฐ์ ์ถ๋ ฅ๋๋ ๊ฐ์ hash code ๋ผ๊ณ ํ๋๋ฐ ์ด ๊ฐ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค.
ํด์ฌ ์ธ๋ฑ์ค๋ฅผ ์ ์ฌ์ฉํ๋ฉด ํ๊ท ์กฐํ์๊ฐ์ O(1)์ด๊ณ , ๊ณต๊ฐ๋ ๋น๊ตํ๊ณ ์ ํ๋ ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ๋ณ๋์ ํด์ฌ ํ ์ด๋ธ์ ๊ตฌ์ฑํด์ผ ํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ก ์ด์ด์ง ์ ์๋ ๋จ์ ์ด ์๋ค.(b-tree ์ธ๋ฑ์ค์ ๋นํด ํด์ฌ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ ์์ ํธ์ด๋ค.) ํด์ฌ์ถฉ๋์ ํผํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ด ๋ค์ด๊ฐ ์ ์๋ค. ๋ฒ์ ์ฟผ๋ฆฌ์๋ ํจ๊ณผ์ ์ด์ง ์๋ค๋ ๋จ์ ์ด ์๋ค.
mysql์ innodb ์์ง์์ global innodb_adaptive_hash_index
์ต์
์ ์ผ์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ๋ํด ํด์ฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ธด ํ์ง๋ง, ๊ธฐ๋ณธ ํด์ฌ ์๋ฃ๊ตฌ์กฐ์ ๊ณ์ ์์ฌ๊ฐ๋ ํด์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ค์ ํ
์ด๋ธ drop ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
Gist(postgres)
// todo desc
GIN(postgres)
// todo desc
BRIN(postgres)
// todo desc
FULLTEXT(mysql)
// todo desc
R-Tree(mysql)
// todo desc
MultiColumn Index
multicolumn index๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ ํ๋๋ ์ปฌ๋ผ์ ๋๋ฑ ๋น๊ต