[PostgreSQL] DISK(๋””์Šคํฌ) ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

[PostgreSQL] DISK(๋””์Šคํฌ) ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

1. Disk ์˜์—ญ PostgreSQL์˜ ์ €์žฅ ์˜์—ญ์€ ํฌ๊ฒŒ Heap, Index, Toast 3๊ฐœ๋กœ ๋‚˜๋‰œ๋‹ค. ๊ฐ ํ…Œ์ด๋ธ”์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”์ธ heap ์˜์—ญ์— ์ €์žฅํ•œ๊ณ , ํ…Œ์ด๋ธ” ์นผ๋Ÿผ ์ค‘ ๋งค์šฐ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์นผ๋Ÿผ์€ TOAST ์˜์—ญ์— ๋ณ„๋„ ์ €์žฅํ•œ๋‹ค.ย TOAST ํ…Œ์ด๋ธ”์—๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋ณธ๋ž˜ ํ…Œ์ด๋ธ”์—๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค.ย TOAST ํ…Œ์ด๋ธ”์˜ ์œ ํšจํ•œ ์ธ๋ฑ์Šค๋Š” 1๊ฐœ๋ฟ์ด๊ณ , ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์—๋Š” ๋” ๋งŽ์€ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๋Š” ๊ฐ๊ฐ์˜ ๋””์ŠคํฌํŒŒ์ผ์— ์ €์žฅ ๋˜๋ฉฐ ๊ฐ ํŒŒ์ผ์ด 1G๊ฐ€ ๋„˜์œผ๋ฉด ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค. ...

[๋””์ž์ธํŒจํ„ด] ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(Decorator) ํŒจํ„ด์˜ ๊ฐœ๋…, ์˜ˆ์ œ, ์žฅ๋‹จ์ , ํ™œ์šฉ

[๋””์ž์ธํŒจํ„ด] ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(Decorator) ํŒจํ„ด์˜ ๊ฐœ๋…, ์˜ˆ์ œ, ์žฅ๋‹จ์ , ํ™œ์šฉ

1. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(Decorator) ํŒจํ„ด์ด๋ž€? ์ค‘์‹ฌ์ด ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ , ์žฅ์‹์ด ๋˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชฉ์ ์— ๋” ๋งž๋Š” ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๋””์ž์ธ ํŒจํ„ด์„ Decorator ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค. decorator ๋ž€ "์žฅ์‹ํ•˜๋Š” ์‚ฌ๋žŒ"์ด๋ผ๋Š” ๋œป์ด๋‹ค. ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ƒ์„ธ ๊ฐœ๋…์„ ํ™•์ธํ•ด ๋ณด์ž. (Java์–ธ์–ด๋กœ ๋ฐฐ์šฐ๋Š” ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ, 3ํŽธ์˜ ์˜ˆ์ œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์˜€๋‹ค.) ์ ์šฉํ•  ์˜ˆ์ œ๋Š”, ๋ฌธ์ž์—ด ์ฃผ์œ„์— "์žฅ์‹ํ‹€"์„ ๋ถ™์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Hello World๋ผ๋Š” ๊ธฐ๋ณธ ๋ฌธ๊ตฌ์— ์žฅ์‹ํ‹€์„ ๋ถ™์—ฌ ์ค‘์ฒฉ ์žฅ์‹์„ ํ•œ ํ›„ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์ œ์ด๋‹ค. +=============+ |Hello, world| +=============+ ์‚ฌ์šฉ๋  ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ...

[PostgreSQL] PostgreSQL์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„์น˜

[PostgreSQL] PostgreSQL์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„์น˜

1. PostreSQL์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„์น˜ ๋ฌผ๋ก  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ disk ์šฉ๋Ÿ‰, ์„ฑ๋Šฅ ์ด์Šˆ ๋“ฑ ์‹ค์ง์ ์ธ ์ œํ•œ์ด ๋จผ์ € ์ ์šฉ๋˜๊ฒ ์ง€๋งŒ, ๋ชจ๋“  ์ž์›์ด ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ ๋ฌผ๋ฆฌ์ ์ธ limit์ด๋‹ค. ํ•ญ๋ชฉ ์ตœ๋Œ€์น˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์ฆˆ ๋ฌด์ œํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜๋Ÿ‰ 4,294,950,911 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹น Relations(ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค ๋“ฑ์˜ ํ…Œ์ด๋ธ” ๊ฐ์ฒด)์ˆ˜๋Ÿ‰ย 1,431,650,303 Relations ์‚ฌ์ด์ฆˆ 32TBย ํ…Œ์ด๋ธ” ๋‹น ROW ์ˆ˜๋Ÿ‰ 4,294,967,295 pages์˜์—ญ์˜ ํฌ๊ธฐ์— ํ•ด๋‹นํ•˜๋Š” ROW ํ…Œ์ด๋ธ” ๋‹น COL ์ˆ˜๋Ÿ‰ 1,600 ๊ฒฐ๊ณผ์…‹์˜ COL ์ˆ˜๋Ÿ‰ 1,664 COL ์‚ฌ์ด์ฆˆ 1GB ํ…Œ์ด๋ธ” ๋‹น ์ธ๋ฑ์Šค ์ˆ˜๋Ÿ‰ ๋ฌด์ œํ•œ ์ธ๋ฑ์Šค ๋‹น ์ปฌ๋Ÿผ 32 ํŒŒํ‹ฐ์…˜ ํ‚ค 32 ์‹๋ณ„์ž ํ‚ค (ex, ํ…Œ์ด๋ธ”, ROW, COL ๋“ฑ์˜ ๋ช…์นญ) 63 bytes function์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ 100 ์ฟผ๋ฆฌํŒŒ๋ผ๋ฏธํ„ฐ 65,535 ํ…Œ์ด๋ธ”๋‹น ROW ์ˆ˜๋Ÿ‰์€ 4,294,967,295๊ฐœ์˜ pages ์˜์—ญ์— ์ €์žฅ ๊ฐ€๋Šฅํ•œ ROWS๋กœ ์ œํ•œ๋˜์–ด ์žˆ๋Š”๋ฐ, 4,294,967,295๋Š” 2^32 - 1๋กœ 32๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ์ •์ˆ˜์ด๋‹ค.ย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ๋Œ€๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” pages์˜ ์ˆ˜๋ฉฐ, ๊ฐ ํŽ˜์ด์ง€์—๋Š” ์—ฌ๋Ÿฌ ํŠœํ”Œ์ด ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ด๋ธ” ๋‹น ์ธ๋ฑ์Šค์˜ ์ˆ˜๋Ÿ‰์€ ์ด๋ก ์ƒ์€ โ€œ๋ฌด์ œํ•œ"์ด์ œ๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ Relations (ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค ๋“ฑ์˜ ํ…Œ์ด๋ธ” ๊ฐ์ฒด)์— ์˜ํ•ด ์ œํ•œ๋œ๋‹ค.ย ์œ„ ํ‘œ์˜ ์ธ๋ฑ์Šค ๋‹น ์นผ๋Ÿผ ์ˆ˜, ํŒŒํ‹ฐ์…˜ ํ‚ค ์ˆ˜๋Ÿ‰, ์‹๋ณ„์ž ํ‚ค, ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ตœ๋Œ€ ์ˆ˜๋Ÿ‰์€ ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ ์„ค์ •๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ด๋ธ” ๋‹น ์ตœ๋Œ€ ์นผ๋Ÿผ ์ˆ˜๋Š” 1600๊ฐœ์ด์ง€๋งŒ, ์ €์žฅ๋˜๋Š” ํŠœํ”Œ์ด 8192๋ฐ”์ดํŠธ์˜ ํž™ ํŽ˜์ด์ง€์— fit ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด ๋•Œ๋ฌธ์— ๋” ์ค„์–ด๋“ค ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠœํ”Œ ํ—ค๋”๋ฅผ ์ œ์™ธํ•˜๊ณ , 1600๊ฐœ์˜ int์นผ๋Ÿผ ํˆฌํ”Œ - 6400 bytes๋กœ ํž™ํŽ˜์ด์ง€์— ์ •์ƒ ์ €์žฅ ๊ฐ€๋Šฅ (6400 < 8192) 1600์˜ bigint์นผ๋Ÿผ ํˆฌํ”Œ - 12800 bytes๋กœ heap page๋ฅผ ์ดˆ๊ณผ (12800 < 8192) text, varchar, char๊ฐ™์ด ๊ธธ์ด ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•œ ํ•„๋“œ์˜ ๊ฒฝ์šฐ ๊ฐ’์ด ํฌ๋ฉด TOAST ํ…Œ์ด๋ธ” ์˜์—ญ์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ์ฃผ ์ €์žฅ๊ณต๊ฐ„ ์™ธ๋ถ€์˜์—ญ์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ๋ณธ๋ž˜ ํ…Œ์ด๋ธ”์—๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค.ย ํ…Œ์ด๋ธ”์—์„œ ์‚ญ์ œ๋œ ์นผ๋Ÿผ๋“ค๋„ ์ตœ๋Œ€ ์นผ๋Ÿผ ๊ฐœ์ˆ˜์— ํฌํ•จ๋œ๋‹ค.ย ์‚ญ์ œ๋œ ์นผ๋Ÿผ์— ๋Œ€ํ•ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ROW๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” null ํ‘œ์‹œ๋˜์ง€๋งŒ, ์ถ”์ ์„ ์œ„ํ•ด ์—ฌ์ „ํžˆ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜์—ฌ ์ตœ๋Œ€ ๊ฐœ์ˆ˜์— ์˜ํ–ฅ์„ ์ค€๋‹ค. 2. ๊ฒฐ๋ก  ์šด์˜ ๋‹จ๊ณ„์—์„œ 1์–ต ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ 1000๊ฐœ๊ฐ€ ๋„˜๋Š” ์นผ๋Ÿผ์˜ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ์ผ์€ ์—†์„ ๊ฒƒ์ด๊ณ , ์ด๋Ÿฌํ•œ ๋ฌผ๋ฆฌ์  ์ œ์•ฝ๋ณด๋‹ค ์ž์›์˜ ํ•œ๊ณ„ (์šฉ๋Ÿ‰ ๋ฐ ์„ฑ๋Šฅ์ด์Šˆ)๋ฅผ ๋จผ์ € ๋งŒ๋‚  ๊ฒƒ์ด๊ธฐ์— ์ •ํ™•ํ•œ ์ˆ˜์น˜๋ฅผ ์ •ํ™•ํžˆ ์™ธ์šธ ํ•„์š”๋Š” ์—†๊ฒ ์ง€๋งŒ, ์‚ญ์ œ๋œ ์นผ๋Ÿผ๋“ค๊ณผ ๊ทธ ์ดํ›„ ์ƒ์„ฑ๋œ ROW๋“ค์ด ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ถ”์ ์„ ์œ„ํ•ด ํ•ด๋‹น ์ปฌ๋Ÿผ์„ NULL๋กœ ์ €์žฅํ•˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” NULL๋น„ํŠธ๋งต์ด ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ์— ์ตœ๋Œ€ ์นด์šดํŠธ์— ์˜ํ–ฅ์„ ์ค€๋‹ค๋Š” ๊ฒƒ ์šด์˜ ์‹œ์— ์œ ์˜ํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด๋‹ค. ...

[PostgreSQL] Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)๋ž€? Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)์˜ ๊ฐœ๋…๊ณผ ์ž‘๋™๋ฐฉ์‹

[PostgreSQL] Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)๋ž€? Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)์˜ ๊ฐœ๋…๊ณผ ์ž‘๋™๋ฐฉ์‹

1. Planner / Optimizer (ํ”Œ๋ž˜๋„ˆ / ์˜ตํ‹ฐ๋งˆ์ด์ €) ๋ž€? Planner / Optimizer๋Š” ์ฟผ๋ฆฌ์˜ ์ตœ์ ํ™”๋œ ์‹คํ–‰ ๊ณ„ํš์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ํ•œ ๊ฐœ์˜ SQL ์ฟผ๋ฆฌ๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์ง€๋งŒ,ย ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๊ณผ ์ˆœ์„œ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. Planner / Optimizer (์ดํ›„๋Š” Planner๋กœ ๋ช…์นญ)๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐ๊ฐ์˜ ํ”Œ๋žœ์„ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ถ๊ทน์ ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ "๊ธฐ๋Œ€"๋˜๋Š” ํ”Œ๋žœ์„ ์„ ํƒํ•œ๋‹ค.ย 1-1. Genetic Query Optimize ๊ฐ€๋” ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹๋“ค์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ๋งŒ๋„ ๊ต‰์žฅํžˆ ํฐ ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค. (ํŠนํžˆ, ๋งŽ์€ ์–‘์˜ join์„ ํฌํ•จํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ) ํ•ฉ๋ฆฌ์ ์ธ ์ฟผ๋ฆฌ ํ”Œ๋žœ(์ตœ๊ณ ์ผ ํ•„์š”๋Š” ์—†๋‹ค)์„ ํ•ฉ๋ฆฌ์ ์ธ ์‹œ๊ฐ„ ๋‚ด์— ์ฐพ๊ธฐ ์œ„ํ•ด, PostgreSQL์€ join์ˆ˜๋Ÿ‰์ด ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด Genetic Query Optimizer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Genetic Query Optimize๋Š” ์ตœ์ ์˜ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด, ์ผ๋ถ€ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ์‹œ๋„ ํ›„ ์ ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์กฐ์ธ ์ˆœ์„œ์˜ ์ ํ•ฉ์„ฑ์„ ํ‰๊ฐ€ํ•˜์—ฌ ์ตœ์ ์˜ plan์„ ์„ ํƒํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ญ์ƒ ์ตœ์„ ์˜ ๋‹ต์„ ์ฐพ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ์— ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค. ...

[PostgreSQL] Index-Only ์Šค์บ”๊ณผ Covering ์ธ๋ฑ์Šค, Index-only์Šค์บ”์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ

[PostgreSQL] Index-Only ์Šค์บ”๊ณผ Covering ์ธ๋ฑ์Šค, Index-only์Šค์บ”์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ

1. Index-Only Scans PostgreSQL์˜ ๋ชจ๋“  ์ธ๋ฑ์Šค๋Š” "๋ณด์กฐ(Secondary)" ์ธ๋ฑ์Šค์ด๋‹ค. ๊ฐ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฉ”์ธ ๋ฐ์ดํ„ฐ ์˜์—ญ(ํ…Œ์ด๋ธ”์˜ heap ์˜์—ญ)๊ณผ ๋ถ„๋ฆฌ๋˜์–ด์„œ ์ €์žฅ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค ์Šค์บ”์—์„œ ๊ฐ ROW๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š”, index์™€ heap ์˜์—ญ ๋ชจ๋‘์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. ๋ณดํ†ต WHERE ์ ˆ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ธ๋ฑ์Šค ์˜์—ญ - ์„œ๋กœ ๊ฐ€๊นŒ์ด ์กด์žฌํ•˜์—ฌ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ƒ์„ฑ) heap ์˜์—ญ -ย ํŠน๋ณ„ํ•œ ๊ทœ์น™ ์—†์ด ์–ด๋””์—์„œ๋“  ๋ถ„ํฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— heap ์˜์—ญ์„ ์Šค์บ”ํ•  ๋•Œ๋Š” ๋ฌด์ž‘์œ„๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜์–ด ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ์ด ํผํฌ๋จผ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PostgreSQL์€ ํž™ ์˜์—ญ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์—†์ด ์ธ๋ฑ์Šค ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” Index-only ์Šค์บ”์„ ์ง€์›ํ•œ๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋…์€ ๋ง ๊ทธ๋Œ€๋กœ heap ์˜์—ญ์˜ ์ฐธ์กฐ ์—†์ด index ํ•ญ๋ชฉ์—์„œ ๋ฐ”๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ๋‹ค. ...