
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์๋๋ฅผ ๋์ด๋ ์ธ๋ฑ์ค ํ์ฉ๋ฒ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์๋๋ฅผ ๋์ด๋ ์ธ๋ฑ์ค ํ์ฉ๋ฒ ๊ด๋ จ
๋ณธ๋ฌธ์ ์์ฆIT์ ๋ฒ์ญ๊ฐ David (davidclimbing
)๊ฐ ํจ๊ป ๋ง๋ค์์๋ฅด ํ๋ผ(Maneshwar C Holla (maneshwar-athreya
))์ ๊ธ <Speed Up DB Queries Like a Pro (lovestaco
)>์ ๋ฒ์ญํ ๊ธ์
๋๋ค. ํ์๋ ์ํํธ์จ์ด ์์ง๋์ด์ด์ ๊ธฐ์ ์๊ฐ๋ก, DEV Community์ Forem์์ ํ๋ฐํ ํ๋ํ๊ณ ์์ต๋๋ค. ํ์ฌ ๊ทธ๋ Antino์์ ๊ทผ๋ฌดํ๋ฉฐ, ์ด์ ์๋ Hexmos์์ ๊ฒฝํ์ ์์์ต๋๋ค. ๋ํ i3 ์๋์ฐ ๋งค๋์ ์ Linux Mint๋ฅผ ์ ์ฉํ๋ฉฐ, ์์ ์ ๋ธ๋ก๊ทธ๋ฅผ ํตํด ๊ฐ๋ฐ ๋ฐ ๊ธฐ์ ์ ๋ํ ํต์ฐฐ๋ ฅ ์๋ ๊ธ๋ค์ ๊ณต์ ํ๊ณ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํ ์ธ๋ฑ์ค ์ฌ์ฉ๋ฒ๊ณผ ๊ทธ ์ค์์ฑ์ ๋ํด ๋ค๋ฃน๋๋ค. ๊ทธ๋ PostgreSQL์ B-ํธ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์๋ก ๋ค์ด, ์ธ๋ฑ์ค์ ์๋ ๋ฐฉ์๊ณผ ์ ์ ํ ์ฌ์ฉ ์์ ์ ๊ฐ์กฐํ๋ฉฐ, EXPLAIN ANALYZE ๋ช ๋ น์ด๋ฅผ ํ์ฉํ ์ฑ๋ฅ ์ธก์ ๊ธฐ๋ฒ๋ ์๊ฐํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ๋๋๊ธฐ๋ฅผ ํ์ฐธ ๊ธฐ๋ค๋ ค๋ณธ ๊ฒฝํ์ด ์๋ค๋ฉด, ๊ทธ ๊ธฐ๋ค๋ฆผ์ด ์ผ๋ง๋ ๊ณ ํต์ค๋ฌ์ด์ง ์์ค ๊ฒ๋๋ค. ๋คํํ๋ ์ธ๋ฑ์ค๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค ์ ์์ต๋๋ค. PostgreSQL์ ๊ฐ๋ ฅํ์ง๋ง, ์ ์ ํ ์ธ๋ฑ์ฑ ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ง์น ๊ตฌํ ์ปดํจํฐ์์ ๋์๊ฐ๋ ๊ฒ์ฒ๋ผ ๋๋ฆด ์ ์์ต๋๋ค.
์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ํฅ์์ํค๋ ๋น๊ฒฐ์ด์ง๋ง, ๋์์ ํธ๋ ์ด๋์คํ๋ ์กด์ฌํฉ๋๋ค.
์ธ๋ฑ์ค๋ ๋ฌด์์ธ๊ฐ?
PostgreSQL์ ์ธ๋ฑ์ค๋ ์ฑ ์ ์์ธ๊ณผ ๊ฐ์ ์๋ฆฌ๋ก ์๋ํฉ๋๋ค. ๋ชจ๋ ํ์ด์ง๋ฅผ ์ผ์ผ์ด ์ดํด๋ณด๋ ๋์ , ํ์ํ ๋ถ๋ถ์ผ๋ก ๋ฐ๋ก ์ด๋ํ ์ ์์ฃ . ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด PostgreSQL์ ์์ฐจ ๊ฒ์์ ์ํํ๋๋ฐ, ์ด๋ ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ๊ธฐ ์ํด ๋ชจ๋ ํ์ ํ์ธํด์ผ ํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ฑ๋ฅ ๋ฉด์์ ์ข์ง ์์ฃ .
์ธ๋ฑ์ค๋ ํนํ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
- โWHEREโ ์ ์ด ์๋ ์ฟผ๋ฆฌ ์๋ ๊ฐ์
- JOIN ์ฑ๋ฅ ๊ฐ์
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ด ์ ํ์ ์ด ์๋ ๋ก๊ทธ ์๊ฐ์ผ๋ก ์ค์ด๋ญ๋๋ค. ์์ ๋ณต์ก๋๋ก ๊ฐ์ ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ํ์ง๋ง ์ธ๋ฑ์ค๊ฐ ๋ง๋ฒ์ ์๋๋๋ค. ํธ๋ ์ด๋์คํ๊ฐ ์์ฃ . ์ ์ฅ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์ฐ๊ธฐ ์์ ์ ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ธ์ , ์ด๋์ ์ฌ์ฉํ ์ง ํ๋ช ํ๊ฒ ํ๋จํด์ผ ํฉ๋๋ค.

์ธ๋ฑ์ค์ ์๋ ์๋ฆฌ: B-ํธ๋ฆฌ์ ๋ง๋ฒ
PostgreSQL์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค ์ ํ์ B-ํธ๋ฆฌ(๊ท ํ ํธ๋ฆฌ)์ ๋๋ค. ๋น ๋ฅธ ๊ฒ์์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฃจํธ ๋ ธ๋: ๋ชจ๋ ๊ฒ์์ ์์์
- ๋ถ๊ธฐ ๋ ธ๋: ๊ฒ์์ ์๋ง์ ๋ฆฌํ ๋ ธ๋๋ก ์๋ด
- ๋ฆฌํ ๋ ธ๋: ์ค์ ๋ฐ์ดํฐ ํฌ์ธํฐ๋ฅผ ์ ์ฅ
์๋ฅผ ๋ค์ด, ํ ์ด๋ธ์์ โ๊น์ฒ ์โ๋ผ๋ ์ด๋ฆ์ ๊ฒ์ํ๋ค๋ฉด, B-ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
- ๋ฃจํธ์์ ์์
- ํ์ฌ ๋ ธ๋์ โ๊น์ฒ ์โ ๋น๊ต
- ๋น๊ต ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
- ์ ํํ ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
์ด ๊ณผ์ ์ ํตํด ํ์ํ ๋น๊ต ํ์๊ฐ ์ค์ด๋ค์ด ๊ฒ์ ์๋๊ฐ ๋ก๊ทธ ์๊ฐ์ผ๋ก ๋นจ๋ผ์ง๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
์ฝ๊ธฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ธ์. ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ ๊ฒฝ์ฐ
์ธ๋ฑ์ค๋ ๊ณต์ง๊ฐ ์๋๋๋ค. INSERT, UPDATE, DELETE ์์ ์ ํ ๋๋ง๋ค ์ธ๋ฑ์ค๋ ํจ๊ป ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์ด๋ ์ฐ๊ธฐ ์์ฃผ์ ์์ ์์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค ์ฌ์ฉ์ ํผํ์ธ์.
- ํ ์ด๋ธ์ด ์์ ๊ฒฝ์ฐ(PostgreSQL์ด ์ด์ฐจํผ ๋น ๋ฅด๊ฒ ์ค์บ ๊ฐ๋ฅ)
- ์ธ๋ฑ์ค๋ ์ด๋ก ๊ฑฐ์ ํํฐ๋งํ์ง ์๋ ๊ฒฝ์ฐ
- ์ฐ๊ธฐ๊ฐ ๋น๋ฒํ๊ณ ์ฝ๊ธฐ ์๋๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํธ๋์ญ์ ์์ฃผ์ด๋ฉฐ ๋น ๋ฅธ ์ฝ์ /์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ
PostgreSQL์ MVCC[1] ๋ฉ์ปค๋์ฆ์ โํ ์ ์ฉ ํํโ(HOT) ์ ๋ฐ์ดํธ๋ก ์ด์ด์ง ์ ์์ด ์ฃฝ์ ํ์ด ์๊ธฐ๊ณ I/O๊ฐ ์ฆ๊ฐํ ์ ์์ต๋๋ค.

์ธ๋ฑ์ค ์ฑ๋ฅ ์ธก์
๋ฌด์์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์, ์ค์ ๋ก ๋์์ด ๋๋์ง ์๋์ ๊ฐ์ด ํ
์คํธํด ๋ณผ ์ ์์ต๋๋ค. PostgreSQL์ ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ ๋ถ์ํ ์ ์๋ EXPLAIN ANALYZE
๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํด ๋ณด์ธ์.
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';
Seq Scan๊ณผ Index Scan์ ํ์ธํ์ธ์. ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด๋ ์ฟผ๋ฆฌ ์๊ฐ์ด ์ค์ง ์๋๋ค๋ฉด, ๊ทธ ์ธ๋ฑ์ค๋ ๋ถํ์ํ ๊ฒ์ ๋๋ค.
์ธ๋ชจ์๋ ์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์.
DROP INDEX index_name;
PostgreSQL์ ์ธ๋ฑ์ค ์ ํ๋ค*
๋ชจ๋ ์ธ๋ฑ์ค๊ฐ ๋์ผํ๊ฒ ๋ง๋ค์ด์ง ๊ฒ์ ์๋๋๋ค. PostgreSQL์ ์ฌ๋ฌ ์ ํ์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
B-ํธ๋ฆฌ์ธ๋ฑ์ค(๊ธฐ๋ณธ๊ฐ)
์ค์ง์ ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ถ B-ํธ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. B-ํธ๋ฆฌ๋, ํธ๋ฆฌ์ ๊ฐ ๋ถ๊ธฐ์ ์๋ ๋ฐ์ดํฐ์ ์์ด ๋๋ต์ ์ผ๋ก ๋์ผํ๋๋ก ๊ท ํ์ ์ ์งํ๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ ์ฐพ๊ธฐ ์ํด ์ํํด์ผ ํ๋ ๋ ๋ฒจ์ ์๋ ํญ์ ๋น์ทํ ์์ค์ ๋๋ค.
B-ํธ๋ฆฌ ์ธ๋ฑ์ค๋ ๋๋ฑ ๋น๊ต์ ๋ฒ์ ์ฟผ๋ฆฌ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ ๋ํด ์๋ํ ์ ์์ผ๋ฉฐ, NULL ๊ฐ์ ๊ฒ์ํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. B-ํธ๋ฆฌ๋ ๋ถ๋ถ์ ์ผ๋ก๋ง ์บ์๋์ด ์๋๋ผ๋ ์บ์ฑ๊ณผ ๋งค์ฐ ์ ์๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๊ฐ์ : ๋๋ฑ ๋ฐ ๋ฒ์ ์ฟผ๋ฆฌ (=, <, <=, >, >=)
์์
CREATE INDEX idx_users_email ON users(email);
ํด์ ์ธ๋ฑ์ค (PostgreSQL 10+ ๋ฒ์ ์์ ๊ฐ์ ๋จ)
PostgreSQL 10 ์ด์ ๋ฒ์ ์์๋ ๋๋ฑ ๋น๊ต์๋ง ์ ์ฉํ์์ผ๋, ํธ๋์ญ์ ์ ์์ ํ์ง ์๊ณ ์ถฉ๋ ํ ์๋์ผ๋ก ์ฌ๊ตฌ์ถํด์ผ ํ๋ฉฐ ํ๋ก์์ ๋ณต์ ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ๋ผ์ B-Tree์ ๋นํด ์ฅ์ ์ด ๋งค์ฐ ์ ์ต๋๋ค.
PostgreSQL 10 ์ด์์ ๋ฒ์ ์์๋ ํด์ ์ธ๋ฑ์ค๊ฐ ์ด์ ์ ํ ๊ธฐ๋ก๋๊ณ ํ๋ก์์๊ฒ ๋ณต์ ๋ฉ๋๋ค.
- ๋๋ฑ ๋น๊ต(=)์ ์ต์ ํ๋์ด ์์ต๋๋ค.
- ๋ฒ์ ์ฟผ๋ฆฌ(>, <)์๋ ์ ํฉํ์ง ์์ต๋๋ค.
์์
CREATE INDEX idx_users_hash_email ON users USING hash(email);
GIN (์ผ๋ฐํ๋ ์ญ ์ธ๋ฑ์ค)
GIN์ ํ๋์ ํ์ ์ฌ๋ฌ ๊ฐ์ ๋งคํํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค. ๋ฐ๋ฉด B-Tree ์ธ๋ฑ์ค๋ ํ์ ๋จ์ผ ํค๊ฐ์ด ์์ ๋ ์ต์ ํ๋์ด ์์ต๋๋ค.
GIN์ ๋ฐฐ์ด ๊ฐ์ ์ธ๋ฑ์ฑ๊ณผ ์ ์ฒด ํ ์คํธ ๊ฒ์์ ๊ตฌํํ๋ ๋ฐ ์ข์ต๋๋ค.
- ์ ๋ฌธ ๊ฒ์๊ณผ JSONB ํ๋์ ์ฌ์ฉ๋ฉ๋๋ค.
์์
CREATE INDEX idx_users_bio ON users USING gin(to_tsvector('korean', bio));
GiST (์ผ๋ฐํ๋ ๊ฒ์ ํธ๋ฆฌ)
GiST ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ๊ท ํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ, ๋๋ฑ ๋น๊ต์ ๋ฒ์ ๋น๊ต๋ฅผ ๋์ด์ ์์ ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐํํ์ ๋ฐ์ดํฐ ํ์ ๋ฟ๋ง ์๋๋ผ ์ ์ฒด ํ ์คํธ ๊ฒ์์๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ธฐํ ๋ฐ ๋ฒ์ ์ฟผ๋ฆฌ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
- PostGIS(๊ณต๊ฐ ๋ฐ์ดํฐ ์ธ๋ฑ์ฑ)์์ ์ฌ์ฉ๋ฉ๋๋ค.
์์
CREATE INDEX idx_locations ON places USING gist(location);
BRIN (๋ธ๋ก ๋ฒ์ ์ธ๋ฑ์ค)
๋์ฉ๋์ ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ(์๊ณ์ด ๋ฐ์ดํฐ์ ๊ฐ์)์ ํจ์จ์ ์ ๋๋ค.
- B-ํธ๋ฆฌ๋ณด๋ค ์ ์ฅ ๊ณต๊ฐ์ ์ ๊ฒ ์ฌ์ฉํฉ๋๋ค.
์์
CREATE INDEX idx_logs_timestamp ON logs USING brin(timestamp);
๊ณ ๊ธ ์ธ๋ฑ์ฑ ์ ๋ต
๋ณตํฉ ์ธ๋ฑ์ค
์์ฃผ ํจ๊ป ์กฐํ๋๋ ์ฌ๋ฌ ์ด์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
CREATE INDEX idx_orders_user_date ON orders(user_id, order_date);
B-ํธ๋ฆฌ, GiST, GIN, BRIN ์ธ๋ฑ์ค ์ ํ๋ง์ด ๋ค์ค ํค ์ด ์ธ๋ฑ์ค๋ฅผ ์ง์ํฉ๋๋ค. ๋ค์ค ํค ์ด์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ๋ INCLUDE ์ด์ ์ธ๋ฑ์ค์ ์ถ๊ฐํ ์ ์๋์ง์๋ ๋ณ๊ฐ์ ๋๋ค. ์ธ๋ฑ์ค๋ INCLUDE ์ด์ ํฌํจํ์ฌ ์ต๋ 32๊ฐ์ ์ด์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ถ๋ถ ์ธ๋ฑ์ค
๊ณต๊ฐ์ ์ ์ฝํ๊ธฐ ์ํด ๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ๋ง ์ธ๋ฑ์ฑํฉ๋๋ค.
CREATE INDEX idx_active_users ON users(email) WHERE is_active = true;
๋ถ๋ถ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์ผ๋ถ๋ถ์ ๋ํด ๊ตฌ์ถ๋ ์ธ๋ฑ์ค์ ๋๋ค. ์ด ๋ถ๋ถ ์งํฉ์ ์กฐ๊ฑด์์ ์ํด ์ ์๋ฉ๋๋ค. ํด๋น ์ธ๋ฑ์ค๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ ์ด๋ธ ํ์ ๋ํ ํญ๋ชฉ๋ง ํฌํจํฉ๋๋ค.
์ปค๋ฒ๋ง ์ธ๋ฑ์ค
๋ฉ์ธ ํ ์ด๋ธ์ ์ ๊ทผํ์ง ์๋๋ก ์ถ๊ฐ ์ด์ ์ ์ฅํฉ๋๋ค.
CREATE INDEX idx_orders_covering ON orders(user_id, order_date) INCLUDE (total_price);
PostgreSQL์ ๋ชจ๋ ์ธ๋ฑ์ค๋ ๋ณด์กฐ ์ธ๋ฑ์ค์ ๋๋ค. ์ด๋ ๊ฐ ์ธ๋ฑ์ค๊ฐ ํ ์ด๋ธ์ ์ฃผ์ ๋ฐ์ดํฐ ์์ญ๊ณผ ๋ณ๋๋ก ์ ์ฅ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ณ ์ ์ธ๋ฑ์ค
์ด์ ๊ณ ์ ์ฑ์ ํจ์จ์ ์ผ๋ก ๋ณด์ฅํฉ๋๋ค.
CREATE UNIQUE INDEX idx_unique_email ON users(email);
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ์ด ๋๋ ์ฌ๋ฌ ์ด์ ์กฐํฉ๋ ๊ฐ์ ๊ณ ์ ์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. B-tree ์ธ๋ฑ์ค๋ง์ด ๊ณ ์ ์ธ๋ฑ์ค๋ก ์ ์ธ๋ ์ ์์ต๋๋ค.
ํธ๋ ์ด๋์คํ: ์ฝ๊ธฐ vs ์ฐ๊ธฐ ์ฑ๋ฅ

์ฝ๊ธฐ ์์ ์ด ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด, ์ธ๋ฑ์ค ์ฌ์ฉ์ ๋น์ฐํ ์ ํ์ ๋๋ค. ๋ฐ๋ฉด, ์ฐ๊ธฐ ์์ ์ด ๋ง์ ๊ฒฝ์ฐ์๋ ์ ์คํ๊ฒ ์ ํํด์ผ ํฉ๋๋ค.
์ ๋ฆฌํ๋ฉฐ
์ธ๋ฑ์ค๋ PostgreSQL์์ ์ฑ๋ฅ์ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ ์ ์๋ ํต์ฌ ์์ ์ค ํ๋์ ๋๋ค. ๋ค์ ์ฌํญ์ ๊ณ ๋ คํ์ฌ ์ ๋ต์ ์ผ๋ก ํ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
- ํํฐ๋ง, ์ ๋ ฌ, ์กฐ์ธ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ธ์.
- ์์ฃผ ์ ๋ฐ์ดํธ๋๋ ํ ์ด๋ธ์๋ ์ธ๋ฑ์ค ์ฌ์ฉ์ ํผํ์ธ์.
- ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์
EXPLAIN ANALYZE
๋ก ํ ์คํธํ์ธ์. - ์ฟผ๋ฆฌ ํจํด์ ๋ง๋ ์ ์ ํ ์ธ๋ฑ์ค ์ ํ์ ์ ํํ์ธ์.
์๋ฌธ
MVCC(๋ค์ค ๋ฒ์ ๋์์ฑ ์ ์ด): ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ถฉ๋ ์์ด ์์ ํ๊ฒ ์์ ํ ์ ์๋๋ก ๊ด๋ฆฌํ๋ ๊ธฐ์ โฉ๏ธ