[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