SQLite 3.35 ๋ฆด๋ฆฌ์Šค

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์„ค๊ณ„๋œ ๊ฒฝ๋Ÿ‰ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€