SkillJavaScriptv1.0.0
postgres-perf
PostgreSQL performance optimization and best practices.
1 downloads
kjaylee
Updated Feb 8, 2026PostgreSQL Performance
DB ์ฟผ๋ฆฌ/์คํค๋ง ์์ฑ ์ ์ฑ๋ฅ ์ต์ ํ ๊ฐ์ด๋.
์ฐ์ ์์๋ณ ํต์ฌ ๊ท์น
๐ด CRITICAL: ์ฟผ๋ฆฌ ์ฑ๋ฅ
-- โ ์ธ๋ฑ์ค ์๋ WHERE
SELECT * FROM orders WHERE customer_email = 'user@example.com';
-- โ
์ธ๋ฑ์ค ์์ฑ
CREATE INDEX idx_orders_email ON orders(customer_email);
- EXPLAIN ANALYZE ์ต๊ดํ โ ์คํ ๊ณํ ํญ์ ํ์ธ
- Seq Scan์ด ํฐ ํ ์ด๋ธ์ ๋ํ๋๋ฉด ์ธ๋ฑ์ค ํ์
SELECT *๊ธ์ง โ ํ์ํ ์ปฌ๋ผ๋ง ์ ํ- N+1 ์ฟผ๋ฆฌ โ JOIN ๋๋ ๋ฐฐ์น ์กฐํ๋ก ๊ต์ฒด
๐ด CRITICAL: ์ปค๋ฅ์ ๊ด๋ฆฌ
- ์ปค๋ฅ์ ํ ์ฌ์ฉ (์ง์ ์ฐ๊ฒฐ ๊ธ์ง)
- Supabase โ pgBouncer (transaction mode)
- ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ โ ์ปค๋ฅ์ ํ ํ์
- ์ ํด ์ปค๋ฅ์ ์ ๋ฆฌ
๐ก HIGH: ์คํค๋ง ์ค๊ณ
-- โ ๋ฌด๋ถ๋ณํ ์ธ๋ฑ์ค
CREATE INDEX idx_everything ON orders(a, b, c, d, e);
-- โ
๋ถ๋ถ ์ธ๋ฑ์ค (์์ฃผ ์ฐ๋ ์กฐ๊ฑด)
CREATE INDEX idx_active_orders ON orders(created_at)
WHERE status = 'active';
- ์ ๊ทํ vs ๋น์ ๊ทํ โ ์ฝ๊ธฐ ํจํด์ ๋ง๊ฒ ๊ฒฐ์
- UUID vs serial โ UUID๊ฐ ๋ถ์ฐ ํ๊ฒฝ์ ์ ๋ฆฌํ๋ ์ธ๋ฑ์ค ํฌ๊ธฐ ํผ
- JSONB โ ๊ตฌ์กฐํ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ง, ์ฟผ๋ฆฌ ๋์์ด๋ฉด ์ปฌ๋ผ์ผ๋ก
๐ข MEDIUM: ๋์์ฑ/์ ๊ธ
- ๋๋ UPDATE/DELETE โ ๋ฐฐ์น ์ฒ๋ฆฌ
SELECT ... FOR UPDATEโ ํ์ํ ํ๋ง ์ ๊ธ- ํธ๋์ญ์ ์ต์ํ (์งง๊ฒ ์ ์ง)
- ๋ฐ๋๋ฝ ๋ฐฉ์ง โ ์ผ๊ด๋ ์ ๊ธ ์์
๐ต LOW: RLS (Row Level Security)
-- ๋ณด์ ์ ์ฑ
์์
CREATE POLICY user_data ON user_profiles
FOR SELECT USING (auth.uid() = user_id);
- RLS ์ ์ฑ ์ ์ธ๋ฑ์ค์ ํจ๊ป ์ค๊ณ (์ฑ๋ฅ ์ํฉํธ!)
auth.uid()ํธ์ถ ์ต์ํ- ๋ณต์กํ ์ ์ฑ โ EXPLAIN์ผ๋ก ์ฑ๋ฅ ํ์ธ
์ค๋ฌด ํ
- ๊ฐ๋ฐ ์ค:
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) - ํ๋ก๋์ : ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ก๊ทธ ํ์ฑํ
- ๋ง์ด๊ทธ๋ ์ด์ : ๋์ฉ๋ ํ ์ด๋ธ ALTER๋ ๋น๋๊ธฐ๋ก
- ๋ฐฑ์ : NAS์ pg_dump ์๋ํ ๊ฐ๋ฅ