[PostgreSQL] SP-GiST์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

[PostgreSQL] SP-GiST์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

1. SP-GiST ์ธ๋ฑ์Šค๋ž€? Space-Partitioned Generalized Search Tree์˜ ์•ฝ์ž์ด๋‹ค.ย GiST์ธ๋ฑ์Šค์™€ ๊ฐ™์ด ์ง€๋ฆฌ, ์ขŒํ‘œ, ip์ฃผ์†Œ ๋ฐ์ดํ„ฐ ๋“ฑ ๋ณต์žกํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธ๋ฑ์Šค ์œ ํ˜•์ด๋‹ค. GiST๊ฐ€ B-tree ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ณด๊ด€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ๋ถ„ํ™”ํ•  ๋•Œ, ์œ„๊ณ„์  ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•˜๊ธฐ์—, ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์œ ํ˜•์œผ๋กœ, GiST๋กœ ๋ถ„๋ฆฌ๋œ ๊ณต๊ฐ„์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ณต๊ฐ„ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. SP-GiST๋Š” ๊ฒน์น˜์ง€ ์•Š๋Š” ์˜์—ญ์œผ๋กœ ์žฌ๊ท€์  ๋ถ„ํ• ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์— ์ ํ•ฉํ•˜๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ SP-GiST๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. 1-1. SP-GiST ์ธ๋ฑ์Šค ์ƒ์„ฑ CREATE INDEX idx_spgist_example ON example_table USING spgist (column1); 1-2. ์žฅ์  ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ : ๊ธฐํ•˜ํ•™, IP, ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅย : ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ, ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ ์ ํ•ฉํ•˜๋„๋ก ์„ค๊ณ„ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ํšจ์œจ ...

[PostgreSQL] GiST์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

[PostgreSQL] GiST์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

1. GiST ์ธ๋ฑ์Šค๋ž€? Generalized Search Tree์˜ ์•ฝ์ž์ด๋ฉฐ B-tree์™€ ๊ฐ™์€ balanced search tree์˜ ํ˜•ํƒœ์ด๋‹ค. B-tree์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ๋œ ์ฑ„๋กœ ๋น„๊ต&์ผ์น˜์˜ ์—ฐ์‚ฐ์— ์ตœ์ ํ™”๋œ ์ฑ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„๋Œ€์˜ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜ (๊ธฐํ•˜ํ•™์ , ํ…์ŠคํŠธ๋ฌธ์„œ, ์ด๋ฏธ์ง€ ๋“ฑ)๋ฅผ ์—ฐ์‚ฐํ•˜๋Š” ๋ฐ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. GiST ์ธ๋ฑ์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ธ๋ฑ์‹ฑ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค. GiST ์ธ๋ฑ์Šค๋Š” ๊ฐ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ Balanced tree ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•˜๊ฒŒํ•˜๊ณ , tree์— ์ ‘๊ทผํ•˜๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜ํ•ด ์ค€๋‹ค. ๊ฐ๊ฐ leaf node๋Š” table row(TID)์™€ boolean ํ˜•ํƒœ์˜ predicate๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ(key)๋Š” ์ด predicate์™€ ๋ถ€ํ•ฉํ•œ๋‹ค. ๊ทธ ํ›„๋Š” ์ผ๋ฐ˜์ ์ธ tree search์ฒ˜๋Ÿผ, ๋ฃจํŠธ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ์–ด๋–ค child node๋กœ ์ง„์ž…ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ leaf node๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ...

[PostgreSQL] Hash ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

[PostgreSQL] Hash ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

1. Hash ์ธ๋ฑ์Šค๋ž€? ํ•ด์‰ฌ ์ธ๋ฑ์Šค์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š”, hash function์„ ํ†ตํ•ด ์ž‘์€ ์ˆซ์ž๋ฅผ ๋ฐ์ดํ„ฐ์™€ ์กฐํ•ฉํ•˜์—ฌ integer ํ˜•ํƒœ์˜ ํ•ด์‰ฌ๊ฐ’ (์ตœ๋Œ€ 2^32 = 4B)์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด์‰ฌ๊ฐ’์„ ํ…Œ์ด๋ธ” ํ–‰ ์ •๋ณด(TID)๊ฐ€ ์ €์žฅ๋  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋ฒ„ํ‚ท(hash table bucket)์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ, hash function์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ key๊ฐ€ ํฌํ•จ๋œ bucket์„ ์ฐพ๊ณ , ๊ทธ bucket๋งŒ ํ™•์ธํ•˜๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๊ฒ€์ƒ‰์ด ๋น ๋ฅด๋‹ค. 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์‹œ๊ฐ„์€ O(1)๋กœ ๋น ๋ฅด์ง€๋งŒย ํ•ด์‰ฌ ํ…Œ์ด๋ธ” ๋‚ด์˜ ๊ฐ’๋“ค์€ ์ •๋ ฌ์ด ๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์œ„ ๋น„๊ต๋‚˜ ๋ถ€์ •ํ˜• ๋น„๊ต๊ฐ€ ํฌํ•จ๋œ ์กฐ๊ฑด์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. Hash function์ด ๋ฒ„ํ‚ท ๋‹จ์œ„๋กœ ์†Œ์Šค ๊ฐ’์„ ๋” ๊ท ์ผํ•˜๊ฒŒ ๋ถ„๋ฐฐํ• ์ˆ˜๋ก ํšจ์œจ์ด ์ข‹๋‹ค.ย ...

[PostgreSQL] B-tree ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

[PostgreSQL] B-tree ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

PostgreSQL์—๋Š” 6๊ฐ€์ง€์˜ ์ธ๋ฑ์Šค ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰์„ ์œ„ํ•ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ์ค‘ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ , ๊ฐ€์žฅ ๋จผ์ € ๋„์ž…๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ B-tree ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. 1. B-tree ์ธ๋ฑ์Šค๋ž€? โ–ชย ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋ฅผ ๋ฐธ๋Ÿฐ์Šค ์žˆ๊ฒŒ ์žฌ์ •๋ ฌํ•œ ํŠธ๋ฆฌํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ โ–ชย B-tree๋Š” Binary ๊ฐ€ ์•„๋‹Œ Balanced์˜ ์•ฝ์ž โ–ชย ์ปฌ๋Ÿผ์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š์Œ โ–ชย ์ธ๋ฑ์Šค ๊ตฌ์กฐ์ฒด ๋‚ด์—์„œ๋Š” ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ 2. B-tree ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ โ–ชย B-tree ์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ ...

[PostgreSQL]  ์ธ๋ฑ์Šค(INDEX)๊ฐœ๋… ๋ฐ ์ƒ์„ฑ, ์‚ญ์ œ, ๋ถ„์„, ์„ค๊ณ„ ๋ฐฉ๋ฒ•

[PostgreSQL] ์ธ๋ฑ์Šค(INDEX)๊ฐœ๋… ๋ฐ ์ƒ์„ฑ, ์‚ญ์ œ, ๋ถ„์„, ์„ค๊ณ„ ๋ฐฉ๋ฒ•

1. ์ธ๋ฑ์Šค ์ปจํŠธ๋กค 1-1. ์ธ๋ฑ์Šค ์กฐํšŒย SELECT * FROM pg_indexes WHERE tablename = '{ํ…Œ์ด๋ธ”๋ช…}'; -- ํ…Œ์ด๋ธ”๋ช…์— '' ํ•„์š” 1-2. ์ธ๋ฑ์Šค ์ƒ์„ฑย -- ๋‹จ์ผ ์ธ๋ฑ์Šค CREATE INDEX {์ธ๋ฑ์Šค๋ช…} ON {ํ…Œ์ด๋ธ”๋ช…} USING btree({์ปฌ๋Ÿผ๋ช…}); -- ๊ฒฐํ•ฉ ์ธ๋ฑ์Šค CREATE INDEX {์ธ๋ฑ์Šค๋ช…} ON {ํ…Œ์ด๋ธ”๋ช…} USING btree({์ปฌ๋Ÿผ๋ช…1}, {์ปฌ๋Ÿผ๋ช…2}); -- ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค CREATE UNIQUE INDEX {์ธ๋ฑ์Šค๋ช…} ON table_name ({์ปฌ๋Ÿผ๋ช…}); 1-3. ์ธ๋ฑ์Šค ์‚ญ์ œ DROP INDEX {์ธ๋ฑ์Šค๋ช…}; 1-4. ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๋นˆ๋„ ํ™•์ธ SELECT schemaname, relname, indexrelname, idx_scan as idx_scan_cnt FROM pg_stat_user_indexes ORDER BY idx_scan; 1-5. ์ธ๋ฑ์Šค ์†์ƒ ์‹œ ์žฌ์ธ๋ฑ์‹ฑ REINDEX INDEX {์ธ๋ฑ์Šค๋ช…} REINDEX TABLE {ํ…Œ์ด๋ธ”๋ช…} REINDEX DATABASE {๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…} ...