ํ๋ฌ๊ทธ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ค๊ณ๋ ๊ฒฝ๋ DBMS์ธ SQLite 3.35์ด ์ถ์๋์์ต๋๋ค. SQLite ์ฝ๋๋ ๊ณต๊ฐ ๋๋ฉ์ธ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์ด๋ค ๋ชฉ์ ์ผ๋ก๋ ์ ํ ์์ด ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. SQLite ๊ฐ๋ฐ์๋ฅผ ์ํ ์ฌ์ ์ ์ง์์ Adobe, Oracle, Mozilla, Bentley ๋ฐ Bloomberg์ ๊ฐ์ ํ์ฌ๋ฅผ ํฌํจํ๋ ํน๋ณํ ๊ตฌ์ฑ๋ ์ปจ์์์์์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ :
- SQL์์ ์ฌ์ฉํ ์ ์๋ ๋ด์ฅ ์ํ ํจ์(log2(), cos(), tg(), exp(), ln(), pow() ๋ฑ)๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ๋ด์ฅ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ค๋ฉด "-DSQLITE_ENABLE_MATH_FUNCTIONS" ์ต์ ์ ์ฌ์ฉํ์ฌ ๋น๋ํด์ผ ํฉ๋๋ค.
- ํ ์ด๋ธ์์ ์ด์ ์ ๊ฑฐํ๊ณ ์ง์ ๋ ์ด์ ์ด์ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๋ "ALTER TABLE DROP COLUMN" ํํ์์ ๋ํ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค.
- UPSERT(์ถ๊ฐ ๋๋ ์์ ) ์์ ์ ๊ตฌํ์ด ํ์ฅ๋์ด "INSERT ... ON CONFLICT DO NOTHING/UPDATE"์ ๊ฐ์ ํํ์ ํตํด ์ค๋ฅ๋ฅผ ๋ฌด์ํ๊ฑฐ๋ ์ถ๊ฐ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฝ์ ํ๋ ๋์ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค. โINSERTโ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค. (์๋ฅผ ๋ค์ด ๋ ์ฝ๋๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ INSERT ๋์ UPDATE๋ฅผ ์ํํ ์ ์์ต๋๋ค.) ์ ๋ฒ์ ์์๋ ์์๋๋ก ์ฒ๋ฆฌ๋๋ ์ฌ๋ฌ ON CONFLICT ๋ธ๋ก์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ง์ง๋ง "ON CONFLICT" ๋ธ๋ก์์๋ "DO UPDATE"๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ถฉ๋ ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
- DELETE, INSERT ๋ฐ UPDATE ์์ ์ ์ญ์ , ์ฝ์ ๋๋ ์์ ๋ ๋ ์ฝ๋์ ๋ด์ฉ์ ํ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ RETURNING ํํ์์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, "insert into ... return id"๋ผ๋ ํํ์ ์ถ๊ฐ๋ ๋ผ์ธ์ ์๋ณ์๋ฅผ ๋ฐํํ๊ณ , "update ... set ๊ฐ๊ฒฉ = ๊ฐ๊ฒฉ * 1.10 ๋ฐํ ๊ฐ๊ฒฉ"์ ๋ณ๊ฒฝ๋ ๊ฐ๊ฒฉ ๊ฐ์ ๋ฐํํฉ๋๋ค.
- WITH ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์์ ๋ช ๋ช ๋ ๊ฒฐ๊ณผ ์งํฉ์ ์ฌ์ฉ์ ํ์ฉํ๋ CTE(๊ณตํต ํ ์ด๋ธ ์)์ ๊ฒฝ์ฐ "MATERIALIZED" ๋ฐ "NOT MATERIALIZED" ๋ชจ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค. โMATERIALIZEDโ๋ ๋ทฐ์ ์ง์ ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๋์ ๋ฌผ๋ฆฌ์ ํ ์ด๋ธ์ ์บ์ฑํ ๋ค์ ์ด ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, โNOT MATERIALIZEDโ๋ ๋ทฐ์ ์ก์ธ์คํ ๋๋ง๋ค ๋ฐ๋ณต ์ฟผ๋ฆฌ๊ฐ ์ํ๋ฉ๋๋ค. SQLite๋ ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก "NOT MATERIALIZED"๋ก ์ค์ ๋์ด ์์์ง๋ง ์ด์ ๋ ๋ฒ ์ด์ ์ฌ์ฉ๋๋ CTE์ ๋ํด "MATERIALIZED"๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
- ๋งค์ฐ ํฐ TEXT ๋๋ BLOB ๊ฐ์ ํฌํจํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ VACUUM ์์ ์ ์ํํ ๋ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ๊ฐ์๋์์ต๋๋ค.
- ์ต์ ํ ํ๋ก๊ทธ๋จ๊ณผ ์ฟผ๋ฆฌ ํ๋๋์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํ ์์
์ด ์ํ๋์์ต๋๋ค.
- "IN" ํํ์๊ณผ ํจ๊ป min ๋ฐ max ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ต์ ํ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- EXISTS ๋ฌธ์ ์คํ์ด ๊ฐ์ํ๋์์ต๋๋ค.
- JOIN์ ์ผ๋ถ๋ก ์ฌ์ฉ๋๋ UNION ALL ํํ์์ ํ์ ์ฟผ๋ฆฌ ํ์ฅ์ ๊ตฌํํ์ต๋๋ค.
- ์ธ๋ฑ์ค๋ IS NOT NULL ํํ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- "NOT NULL" ํน์ฑ์ด ์๋ ์ด์ ๋ํด "x IS NULL" ๋ฐ "x IS NOT NULL"์ด FALSE ๋๋ TRUE๋ก ๋ณํ๋๋์ง ํ์ธํฉ๋๋ค.
- ์์ ์ด ์ธ๋ ํค์ ์ฐ๊ฒฐ๋ ์ด์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด UPDATE์์ ์ธ๋ ํค ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋๋๋ค.
- WHERE ๋ธ๋ก์ ์ผ๋ถ๋ฅผ ์ฐฝ ํจ์๊ฐ ํฌํจ๋ ํ์ ์ฟผ๋ฆฌ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ๋จ, ํด๋น ๋ถ๋ถ์ ์ฐฝ ํจ์์ ์ฌ์ฉ๋๋ PARTITION BY ๋ธ๋ก์ ํํ์ ๋ณต์ฌ๋ณธ ๋ฐ ์์ ์์ ์ผ๋ก ์ ํ๋ฉ๋๋ค.
- ๋ช
๋ น์ค ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ:
- ".filectrl data_version" ๋ช ๋ น์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ".once" ๋ฐ ".output" ๋ช ๋ น์ ์ด์ ๋ช ๋ช ๋์ง ์์ ํ์ดํ("|")๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ๋ ์ฒ๋ฆฌ๊ธฐ์ ์ถ๋ ฅ์ ์ ๋ฌํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค.
- ํํ์ ๋ฐ ๊ฐ์ ๋จธ์ ์นด์ดํฐ์ ๋ํ ํต๊ณ๋ฅผ ํ์ํ๊ธฐ ์ํด "stmt" ๋ฐ "vmstep" ์ธ์๊ฐ ".stats" ๋ช ๋ น์ ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru