[PostgreSQL] ์ธ๋ฑ์ค
์ธ๋ฑ์ค๊ฐ ๋ญ๊น?
์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํด๋ดค๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์์ด์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ด '์ ๋ ฌ'์ด๋ผ๋ ๊ฒ์ ์ ๊ฒ์ด๋ค.
์ ๋ ฌ๋์ด์์ง ์์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ชน์ ๋นํจ์จ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด์ ์์ ํ ๊ฐ์ง๋ ์์ง๋ง ๋น์ทํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ๋ค์ ์ ๋ ฌ์ํจ ์ํ๋ก ๊ด๋ฆฌํด์ ๊ทธ๋๊ทธ๋ ๋นจ๋ฆฌ ๊ณจ๋ผ์ฌ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ธ๋ฑ์ค๋ค.
์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ ค์๋ ์ปฌ๋ผ์ ์กฐ๊ฑด์ ๊ฑธ์ด์ ๊ฐ์ ๊ฐ์ ธ์ค๋ฉด, '์ธ๋ฑ์ค ์ค์บ'์ด๋ ๊ฒ์ ์ ๋ํ ์ ์๋ค.
์ธ๋ฑ์ค ์ค์บ์ด ํญ์ ๋น ๋ฅธ ๊ฒ์ ์๋์ง๋ง, ํฐ ๊ฐ ๋ชฉ๋ก์์ ๊ทน์์์ ๊ฐ๋ง์ ๊บผ๋ด์ฌ ๋๋ ์ด๋ณด๋ค ํจ์จ์ ์ธ ๊ฒ์ด ์๋ค.
์์ธํ ๊ฒ์ ์๋ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
https://blog.naver.com/sssang97/222066082736
ํ๋ฒ ํ
์คํธ๋ฅผ ํด๋ณด์.
pk ํ๋ ๊ฑธ๋ ค์๋ ๊ฐ๋จํ ํ
์ด๋ธ์ด๋ค.
์ฌ์ค pk ์์ฒด๋ ์ธ๋ฑ์ค์ง๋ง ์๋๊ฑธ๋ก ์๊ฐํ๊ณ ์งํํ๊ฒ ๋ค.
์กฐ์ดํ๊ฒ ๊ฐ์ 10๋ง๊ฐ ์ ๋๋ง ๋ฃ์๋ค.

num์๋ ํ์ฌ ์๋ฌด๊ฒ๋ ์๊ธฐ ๋๋ฌธ์, num์ผ๋ก ๊ฐ์ ์ฐพ์์ค๋ฉด ๋๋ คํฐ์ง Seq Scan์ผ๋ก ๊ฐ์ ธ์จ๋ค.
์ผ๋ฐ ์ฝ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ๋ฉด ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์์ ๊ฐ์ ํ๋ํ๋ ๋น๊ตํ๋ฉด์ ์ฐพ๋ ๊ฒ๊ณผ ๋๋ฑํ๋ค.

์ธ๋ฑ์ค์ ์์ฑ
์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด๋ณด์.
์ธ๋ฑ์ค ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ผ๋ก ์ํํ ์ ์๋ค.
create index ์ธ๋ฑ์ค๋ช
on ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
...)

๊ทธ๋ผ ์ด์ index scan์ด ์ ๋๋ ๊ฒ์ด๋ค.

์ธ๋ฑ์ค ์ญ์
์ธ๋ฑ์ค์ ์ญ์ ๋ drop index๋ก ํํ ์ ์๋ค.

์ธ๋ฑ์ค ํ์
์ธ๋ฑ์ค์๋ ์ข
๋ฅ๊ฐ ํ๋๋ง ์๋ ๊ฒ์ด ์๋๋ค.
postgres์ ์ธ๋ฑ์ค๋ b-tree, hash, Gist, Gin ๋ฑ์ด ์ง์๋๋, ํน๋ณํ ์ด์ ๊ฐ ์์ผ๋ฉด ๊ทธ๋ฅ btree๋ฅผ ์ฐ๋ฉด ๋๋ค.
๊ธฐ๋ณธ๊ฐ๋ btree๋ค.
btree๊ฐ ๊ฐ์ฅ ์์ ์ ์ด๊ณ ์ ์ฉํ๋ค.
ํด์๋ ์ฐ๋ฆฌ๊ฐ ์๋ ๊ทธ ํด์ํ ์ด๋ธ์ด๋ค.
๊ต์ฅํ ๋น ๋ฅด๊ณ ์ข์ ๊ฒ ๊ฐ์ง๋ง, btree์ ๋ค๋ฅด๊ฒ ๋ฒ์ ๊ฒ์์ด ๋์ง ์๋๋ค๋ ๋จ์ ์ด ์๋ค.
๋ฑ = ์กฐ๊ฑด์ธ ๊ฒ๋ง ์ธ๋ฑ์ค๋ฅผ ํ๋ค. ๋ณตํฉ์ธ๋ฑ์ค๋ ์๋๊ณ .
๊ทธ๋ฆฌ๊ณ ์ด์ธ์ ์์ํ ๊ธฐ๋ฅ์ ๊ฒฐํจ๋ ๋ง์์ postgres์์๋ ์ฌ์ฉ์ ๋น๊ถ์ฅํ๋ ๊ธฐ๋ฅ์ด๋ค.
๋๋จธ์ง ๋์ ์กฐ๊ฑด๋ ์ฐธ ๊น๋ค๋ก์ด์ง, ๊ทธ๋ฅ์ ์์ฑ์ด ์๋๋ค.
์ด๊ฑด ๋์ค์ ๋ณ๋๋ก ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.

๊ฒฐ๋ก ์ ๊ตณ์ด ํ์
์ฃผ์ง ๋ง๊ณ ๊ทธ๋ฅ btree๋ง ์ฐ๋ฉด ๋๋ค.
๊ทธ๋์ ์์ผ๋ก์ ์ค๋ช
๋ ๋ค btree๋ฅผ ์ ์ ํ ๋ด์ฉ๋ค์ด๋ค.
๋ณตํฉ ์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ ํ ์ปฌ๋ผ์๋ง ์ง์ ํ ์ ์๋ ๊ฒ ์๋๋ผ 2๊ฐ ์ด์์ ์ธ๋ฑ์ค์๋ ์ง์ ํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ์ ๊ฒฝ์ธ๊ฒ ์กฐ๊ธ ๋ ์๊ธด๋ค. ์ปฌ๋ผ์ ์ฌ๋ฌ๊ฐ ๋๋ค๊ณ ๊ฐ ์ปฌ๋ผ๋ง๋ค ์ธ๋ฑ์ค๊ฐ ์๊ธฐ๋ ๊ฑด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌ๋ฉด ์์๊ฐ ์ค์ํด์ง๋ค. ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ num์ด ์ ํ ์ธ๋ฑ์ค๊ฐ ๋ผ์, ์ ๊ฑธ๋ก ๋จผ์ ์กฐ๊ฑด์ ํ๋๊ฒ ๋ ๋น ๋ฅด๋ค! ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์กฐ๊ฑด์ ํ์ ๋ค์ด๊ฐ๋ ๊ตฌ์กฐ๋ผ ๊ทธ๋ ๋ค.
์ผ๋จ ๋๋ค ์ธ๋ฑ์ค ์ค์บ์ ์ ๋ํ ์๋ ์๋ค.
์ ํ ์ปฌ๋ผ์ธ num์ ์คํ์๊ฐ์ด 0.028๋ฐ๋ฆฌ์ด
ํํ์ปฌ๋ผ์ธ text ๊ฒ์์ ์คํ์๊ฐ์ด 2.497๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ ธ๋ค.
๊ทธ๋ผ ์์๋ฅผ ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋์ฌ๊น?

์ด๋ฒ์ ๋ฐ๋๋ก
num์ด 2.951๋ฐ๋ฆฌ์ด.
text๊ฐ 0.050๋ฐ๋ฆฌ์ด๊ฐ ๋์๋ค.
์ ๊ฒฝ์ฐ์.
์ ๋ ฌ
btree ์ธ๋ฑ์ค์ ๋ ํฐ ์ฅ์ ์ค ํ๋๊ฐ ์ ๋ ฌ์ด๋ค.
btree๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ค์ ์ ๋ ฌํด์ ๊ด๋ฆฌํ๋ค๊ณ ํ๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ฆฐ ์ปฌ๋ผ์ ์ ๋ ฌ ์กฐ๊ฑด์ผ๋ก ๊ฑธ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด์ ๋ ๋น ๋ฅด๊ฒ ์ ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ ์๊ฐ ์๋ค!
์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ง ์์ ์ํ์์ order by๋ฅผ ๊ฑธ๋ฉด
๋น์ฉ๋ง 19000์ฌ์,
์คํ์๊ฐ์ด 66 ๋ฐ๋ฆฌ์ด๋ ๊ฑธ๋ ธ๋ค.
์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ณ ๋ค์ ๋๋ ค๋ณด์.

์ด๋ฒ์๋ ๋น์ฉ์ด 10000 ์ ๋์ ์คํ์๊ฐ์ 19 ๋ฐ๋ฆฌ์ด ์ ๋๋ก ๋จ์ถ๋๋ค.
์ด๊ฒ๋ ์ ์์ฉํ๋ฉด ํฐ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ ๋ถ๋ถ์ด๋ค.
๊ณ ์ ์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ create index ์ฌ์ด์ unique๋ฅผ ๋๊ฒจ๋ฃ์ผ๋ฉด ๊ณ ์ ์ธ๋ฑ์ค๊ฐ ๋๋ค.
์ด๋ฌ๋ฉด ์ด๊ฑฐ๋ ์ธ๋ฑ์ค๋ก์๋ง ๋์ํ๋๊ฒ ์๋๋ผ, ์ด ์ปฌ๋ผ ๊ฐ์ ํญ์ ์ค๋ณต๋์ง ์๊ณ ๊ณ ์ ํด์ผ ํ๋ค๋ ์ ์ฝ์ฌํญ์ด ๋๊ธฐ๋ ํ๋ค. ์๋์ผ๋ก CONTRAINT๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด์ ์ค๋ณต๋ ๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ์ค๋ฅ๋ฅผ ๋ธ๋ค.
๊ทธ๋ ๋ค.
์ปค๋ฒ๋ง ์ธ๋ฑ์ค
๋ณตํฉ์ ์ธ ์กฐ๊ฑด์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ๋ ๋ฐฉ๋ฒ๋ก ์ ๋งํ๋ค.
https://blog.naver.com/sssang97/223531204143
์ฐธ์กฐ
https://www.postgresql.org/docs/9.1/indexes-types.html
https://www.postgresql.org/docs/9.1/indexes-multicolumn.html
https://www.postgresql.org/docs/9.1/indexes-ordering.html
https://www.postgresql.org/docs/11/sql-createindex.html