๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

[SQL] DELETE vs TRUNCATE (PostgreSQL, MySQL, SQL Server, Oracle) ๋ณธ๋ฌธ

DB/Database (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)

[SQL] DELETE vs TRUNCATE (PostgreSQL, MySQL, SQL Server, Oracle)

9taetae9 2025. 8. 20. 17:26
728x90

1. DELETE(DML) vs TRUNCATE(DDL)

DELETE: ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด(DML) ๋ช…๋ น์–ด

DELETE๋Š” ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด(DML)์— ์†ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, ํ…Œ์ด๋ธ” ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 

 DELETE์˜ ํ•ต์‹ฌ์€ ๊ฐœ๋ณ„ ํ–‰(row) ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, WHERE ์ ˆ ์—†์ด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 DELETE๊ฐ€ ํ–‰ ๋‹จ์œ„๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ ํ–‰์„ ์‚ญ์ œํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ‘œ์ค€ ํŠธ๋žœ์žญ์…˜ ๋ฐ ์ผ๊ด€์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์‚ญ์ œ๋˜๋Š” ๊ฐ ํ–‰์— ๋Œ€ํ•œ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ(๋˜๋Š” PostgreSQL์˜ WAL, Oracle์˜ Redo ๋กœ๊ทธ) ๊ธฐ๋ก
  • ๊ด€๋ จ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ
  • ON DELETE ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰
  • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•œ ์™ธ๋ž˜ ํ‚ค(Foreign Key) ์ œ์•ฝ ์กฐ๊ฑด ํ™•์ธ

์ด์ฒ˜๋Ÿผ DELETE๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์ •๋ฐ€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋„๊ตฌ์ด๋ฉฐ, ๊ทธ ๊ธฐ๋Šฅ์€ ๊ตฌ์กฐ์  ๋ณ€๊ฒฝ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ์ž์ฒด์˜ ์กฐ์ž‘์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค.

 

TRUNCATE: ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด(DDL) ๋ช…๋ น์–ด

 TRUNCATE๋Š” ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด(DDL)์— ์†ํ•ฉ๋‹ˆ๋‹ค. DDL ๋ช…๋ น์–ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

TRUNCATE๋Š” ํ–‰์„ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹ , ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€(page)๋‚˜ ์ต์Šคํ…ํŠธ(extent)์˜ ํ• ๋‹น์„ ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œ(DROP)ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ(CREATE)ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์ด ์•„๋‹Œ, ํ…Œ์ด๋ธ”์˜ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ DDL๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. TRUNCATE๋Š” ํ–‰ ์ˆ˜์ค€์˜ ์ฒ˜๋ฆฌ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— DELETE์™€ ๋น„๊ต ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘ ์ฐจ์ด๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค.

  • ๋น ๋ฅธ ์„ฑ๋Šฅ
  • ์ตœ์†Œํ•œ์˜ ๋กœ๊น…
  • ON DELETE ํŠธ๋ฆฌ๊ฑฐ ๋ฏธ์ž‘๋™

2. ๋ณดํŽธ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋น„๊ต

DBMS ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด DELETE์™€ TRUNCATE๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ณตํ†ต์ ์ธ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ์„ฑ๋Šฅ์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ: ํ–‰ ์Šค์บ” vs ํŽ˜์ด์ง€ ํ• ๋‹น ํ•ด์ œ

 DELETE ์ž‘์—…์€ ์‚ญ์ œํ•  ํ–‰์„ ์ฐพ๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ” ์Šค์บ”์ด๋‚˜ ์ธ๋ฑ์Šค ์Šค์บ”์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฐ ํ–‰์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์ƒ๋‹นํ•œ ์–‘์˜ I/O์™€ CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•˜๋ฉฐ, ํŠนํžˆ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ ์ด์ƒ์˜ ํ–‰์„ ๊ฐ€์ง„ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ๋งค์šฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด, TRUNCATE๋Š” ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์˜ ํ• ๋‹น์„ ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์†Œ์ˆ˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด๋ฏ€๋กœ I/O๊ฐ€ ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์ด๋ผ๋„ ๊ฑฐ์˜ ์ฆ‰์‹œ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, TRUNCATE๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฆ‰์‹œ ํšŒ์ˆ˜ํ•˜๋ฏ€๋กœ PostgreSQL์˜ VACUUM๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„ ์ •๋ฆฌ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋ฆฌ์†Œ์Šค ์†Œ๋น„: ๋กœ๊น… ๊ณต๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰

 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. DELETE์™€ TRUNCATE๋Š” ๋กœ๊น… ๋ฐฉ์‹์—์„œ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค.

 DELETE๋Š” '์™„์ „ ๋กœ๊น…(fully logged)' ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์‚ญ์ œ๋˜๋Š” ๋ชจ๋“  ํ–‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ(SQL Server), WAL(PostgreSQL), Redo/Undo ๋กœ๊ทธ(Oracle)์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰์˜ ํ–‰์„ ์‚ญ์ œํ•  ๊ฒฝ์šฐ, ์ด๋กœ ์ธํ•ด ๋กœ๊ทธ ํŒŒ์ผ์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ปค์ ธ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•˜๊ณ  ๋ง‰๋Œ€ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 TRUNCATE๋Š” '์ตœ์†Œ ๋กœ๊น…(minimally logged)' ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ํ–‰์˜ ์‚ญ์ œ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋Œ€์‹ , ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋‚˜ ์ต์Šคํ…ํŠธ์˜ ํ• ๋‹น ํ•ด์ œ ์ •๋ณด๋งŒ์„ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ตœ์†Œ ๋กœ๊น… ๋ฐฉ์‹์ด TRUNCATE๋Š” DELETE ๋ณด๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰ ๋™์ž‘

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋ฆฌ๊ฑฐ๋Š” ํŠน์ • ์ด๋ฒคํŠธ(INSERT, UPDATE, DELETE)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์‹œ์ €์ž…๋‹ˆ๋‹ค.

  • DELETE: ์‚ญ์ œ๋˜๋Š” ๊ฐ ํ–‰์— ๋Œ€ํ•ด ON DELETE ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๊ฐ์‚ฌ ์ถ”์ , ์—ฐ๊ด€ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TRUNCATE: ํ–‰ ๋‹จ์œ„ ์ฒ˜๋ฆฌ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ON DELETE ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ: PostgreSQL์€ ๋‹ค๋ฅธ ์ฃผ์š” DBMS์—๋Š” ์—†๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ, ์ „์ฒด TRUNCATE ์ž‘์—…์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ON TRUNCATE ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

3. DBMS๋ณ„ ๊ตฌํ˜„ ๋ฐ ๋™์ž‘ ๋ฐฉ์‹

DELETE์™€ TRUNCATE์˜ ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด์ ์€ ๋ณดํŽธ์ ์ด์ง€๋งŒ, ์‹ค์ œ ๊ตฌํ˜„ ๋ฐฉ์‹๊ณผ ์„ธ๋ถ€ ๋™์ž‘์€ ๊ฐ DBMS๋งˆ๋‹ค ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. PostgreSQL, MySQL(InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๊ธฐ์ค€), Microsoft SQL Server, Oracle 4๊ฐ€์ง€ RDBMS์˜ ํ•ต์‹ฌ์ ์ธ ์ฐจ์ด์ ์„ ๋น„๊ตํ•˜๋ฉฐ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋™์ž‘ ๋ฐ ๋กค๋ฐฑ(Rollback) ๊ฐ€๋Šฅ์„ฑ

PostgreSQL & SQL Server: ํŠธ๋žœ์žญ์…˜์ด ๋ณด์žฅ๋˜๋Š” TRUNCATE

PostgreSQL๊ณผ SQL Server๋Š” TRUNCATE๋ฅผ ํŠธ๋žœ์žญ์…˜์ด ๋ณด์žฅ๋˜๋Š” DDL ๋ฌธ์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, BEGIN TRANSACTION ๋ธ”๋ก ๋‚ด์—์„œ TRUNCATE๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ROLLBACK์„ ํ˜ธ์ถœํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์™„์ „ํžˆ ๋ณต์›๋ฉ๋‹ˆ๋‹ค.

  • PostgreSQL์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜: PostgreSQL์€ ๋‹ค์ค‘ ๋ฒ„์ „ ๋™์‹œ์„ฑ ์ œ์–ด(MVCC) ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. TRUNCATE๊ฐ€ ์‹คํ–‰๋˜๋ฉด, PostgreSQL์€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌผ๋ฆฌ์  ํŒŒ์ผ(relfilenode)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด COMMIT ๋˜๋ฉด ์ด ์ƒˆ๋กœ์šด ๋นˆ ํŒŒ์ผ์ด ๊ณต์‹์ ์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ํŒŒ์ผ์ด ๋˜๊ณ  ์ด์ „ ํŒŒ์ผ์€ ์‚ญ์ œ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ROLLBACK์ด ์‹คํ–‰๋˜๋ฉด, ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ์€ ๋ฒ„๋ ค์ง€๊ณ  ์ด์ „ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ์ฆ‰์‹œ ๋ณต๊ท€ํ•ฉ๋‹ˆ๋‹ค.
  • SQL Server์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜: SQL Server์—์„œ TRUNCATE๋Š” ์ตœ์†Œ ๋กœ๊น… ์ž‘์—…์ด์ง€๋งŒ, ํŽ˜์ด์ง€ ํ• ๋‹น ํ•ด์ œ ์ •๋ณด๊ฐ€ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ROLLBACK์€ ์ด ๋กœ๊ทธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ํ• ๋‹น ํ•ด์ œ๋ฅผ ๋˜๋Œ๋ฆผ์œผ๋กœ์จ ํ…Œ์ด๋ธ”์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

MySQL (InnoDB) & Oracle: ์•”์‹œ์  ์ปค๋ฐ‹(Implicit Commit)

 MySQL๊ณผ Oracle์—์„œ๋Š” DDL ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด Implicitํ•˜๊ฒŒ COMMIT๋˜๋Š” ๋™์ž‘ ๋ฐฉ์‹์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. DDL๋ฌธ ์‹คํ–‰ ์ „๊ณผ ํ›„์— ๊ฐ๊ฐ COMMIT์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— TRUNCATE ๋ฌธ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋” ํฐ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€๊ฐ€ ๋  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ผ๋‹จ ์‹คํ–‰๋˜๋ฉด ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

TRUNCATE ์ด์ „์— ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ๋ธ”๋ก์—์„œ ์ˆ˜ํ–‰๋œ ๋ชจ๋“  ์ž‘์—…์€ TRUNCATE๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ์˜๊ตฌ์ ์œผ๋กœ ์ปค๋ฐ‹๋ฉ๋‹ˆ๋‹ค.

 

 

๋‹ค์Œ ํ‘œ๋Š” ๊ฐ DBMS๋ณ„ TRUNCATE์˜ ๋กค๋ฐฑ ๊ฐ€๋Šฅ์„ฑ์„ ์š”์•ฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

DBMS TRUNCATE ๋กค๋ฐฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŠน์ง•
PostgreSQL O MVCC ๋ฐ ์ƒˆ๋กœ์šด relfilenode ์ƒ์„ฑ์„ ํ†ตํ•ด ๊ตฌํ˜„.
SQL Server O ์ตœ์†Œ ๋กœ๊น…๋˜์ง€๋งŒ ๋กค๋ฐฑ ๊ฐ€๋Šฅํ•œ ์ž‘์—….
MySQL (InnoDB) X ์•”์‹œ์  COMMIT์„ ์œ ๋ฐœํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€๊ฐ€ ๋  ์ˆ˜ ์—†์Œ.
Oracle X DDL ์‹คํ–‰ ์ „ํ›„์— ์•”์‹œ์  COMMIT ๋ฐœ์ƒ

 

์™ธ๋ž˜ ํ‚ค(Foreign Key) ์ œ์•ฝ ์กฐ๊ฑด ์ฒ˜๋ฆฌ ๋ฐฉ์‹

์™ธ๋ž˜ ํ‚ค์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์„ TRUNCATE๋ฅผ ์‚ฌ์šฉํ•ด ๋น„์šฐ๋ ค๊ณ  ํ•  ๋•Œ ๊ฐ DBMS์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ทœ์น™๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 

  • PostgreSQL: CASCADE ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. TRUNCATE my_table CASCADE;๋ฅผ ์‹คํ–‰ํ•˜๋ฉด my_table์„ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด ์žฌ๊ท€์ ์œผ๋กœ ํ•จ๊ป˜ TRUNCATE๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์˜๋„์น˜ ์•Š์€ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์–ด ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ RESTRICT๋Š” ์™ธ๋ž˜ ํ‚ค ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • SQL Server: ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ TRUNCATE๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. CASCADE ์˜ต์…˜์ด๋‚˜ ์„ธ์…˜ ์ˆ˜์ค€์˜ ์žฌ์ •์˜ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ €์žฅํ•œ ํ›„ ์‚ญ์ œ(DROP)ํ•˜๊ณ , TRUNCATE๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ, ์ œ์•ฝ ์กฐ๊ฑด์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Oracle: SQL Server์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ํ™œ์„ฑํ™”๋œ ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์˜ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์„ TRUNCATEํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด์„ ๋จผ์ € ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Oracle 12c ๋ถ€ํ„ฐ CASCADE ์˜ต์…˜์ด ๋„์ž…๋˜์—ˆ๋Š”๋ฐ, ์™ธ๋ž˜ ํ‚ค๊ฐ€ ON DELETE CASCADE๋กœ ์ •์˜๋œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • MySQL: TRUNCATE์— ๋Œ€ํ•œ CASCADE ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค. ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์ด ์กด์žฌํ•˜๋ฉด ์ž‘์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ์„ธ์…˜ ๋™์•ˆ ์ผ์‹œ์ ์œผ๋กœ ์™ธ๋ž˜ ํ‚ค ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE my_table;
SET FOREIGN_KEY_CHECKS=1

 

  • ์œ„ ๋ฐฉ๋ฒ• ํšจ๊ณผ์ ์ด์ง€๋งŒ, ๊ฒ€์‚ฌ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ˆ˜ํ–‰๋  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์ผ๊ด€์ ์ธ ์ƒํƒœ์— ๋†“์ผ ์œ„ํ—˜์ด ์žˆ์–ด ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž ๊ธˆ(Locking), ๋™์‹œ์„ฑ, ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ž‘์—… ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์‹œ์Šคํ…œ์˜ ๋™์‹œ์„ฑ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

  • DELETE (๋ณดํŽธ์ ): ์‚ญ์ œ๋˜๋Š” ํ–‰์— ๋Œ€ํ•ด ํ–‰ ์ˆ˜์ค€ ์ž ๊ธˆ(์˜ˆ: PostgreSQL์˜ ROW EXCLUSIVE)์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋™์ผํ•œ ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ํ–‰์„ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์–ด ๋™์‹œ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • TRUNCATE (DBMS๋ณ„ ์ƒ์ด)
    • PostgreSQL: ํ…Œ์ด๋ธ”์— ACCESS EXCLUSIVE ์ž ๊ธˆ์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ž ๊ธˆ์œผ๋กœ, SELECT๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
    • SQL Server: ํ…Œ์ด๋ธ”์— ์Šคํ‚ค๋งˆ ์ˆ˜์ •(Sch-M) ์ž ๊ธˆ์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฐจ๋‹จํ•˜๋ฉฐ, ๋‹จ์ˆœ SELECT ์ฟผ๋ฆฌ๊ฐ€ ํš๋“ํ•˜๋Š” ๊ฐ€๋ฒผ์šด ์Šคํ‚ค๋งˆ ์•ˆ์ •์„ฑ(Sch-S) ์ž ๊ธˆ๊ณผ๋„ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • MySQL: ํ…Œ์ด๋ธ” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž ๊ธˆ(METADATA_LOCK)์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ, ์ด๋Š” ๋‹ค๋ฅธ ์„ธ์…˜์ด ๋™์ผํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด DDL์ด๋‚˜ ๋‹ค๋ฅธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž ๊ธˆ์„ ํ•„์š”๋กœ ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
    • Oracle: DDL ์ž‘์—…์œผ๋กœ์„œ ๋ฐฐํƒ€์ ์ธ DDL ์ž ๊ธˆ์„ ํ•„์š”๋กœ ํ•˜์—ฌ ๋‹ค๋ฅธ DDL ์ž‘์—…์„ ๋ง‰๊ณ , ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋ง‰๊ธฐ ์œ„ํ•œ DML ์ž ๊ธˆ๋„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.

 TRUNCATE๋Š” ํ…Œ์ด๋ธ” ์ˆ˜์ค€ ์ž ๊ธˆ์ด๋ผ๋Š” ๋™์ž‘ ๋•Œ๋ฌธ์— ๋™์‹œ์„ฑ์ด ๋†’์€ ์˜จ๋ผ์ธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ(OLTP) ์‹œ์Šคํ…œ์—๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ๋ถ€์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋ฅผ ์‹ค์‹œ๊ฐ„ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์‹ฌ๊ฐํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฐจ์›์˜ ๋ธ”๋กœํ‚น๊ณผ ํƒ€์ž„์•„์›ƒ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TRUNCATE๋Š” ์œ ์ง€๋ณด์ˆ˜ ์‹œ๊ฐ„, ETL๊ณผ ๊ฐ™์€ ๋ฐฐ์น˜ ์ž‘์—…, ๋˜๋Š” ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๋„๊ตฌ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋†’์€ ๋™์‹œ์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์„ฑ๋Šฅ ๋น„์šฉ์„ ๊ฐ์ˆ˜ํ•˜๋”๋ผ๋„ DELETE๊ฐ€ ์ตœ์„ ์˜ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž๋™ ์ƒ์„ฑ ๊ฐ’(Identity/Auto-increment/Sequence) ๊ด€๋ฆฌ

์ž๋™์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์‹๋ณ„์ž ์ปฌ๋Ÿผ์˜ ๊ฐ’์€ DELETE์™€ TRUNCATE์— ์˜ํ•ด ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  • PostgreSQL: TRUNCATE๋Š” ์‹œํ€€์Šค ๊ฐ’์— ๋Œ€ํ•œ ๋ช…์‹œ์ ์ธ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. RESTART IDENTITY ์˜ต์…˜์€ ์—ฐ๊ฒฐ๋œ ์‹œํ€€์Šค๋ฅผ ์‹œ์ž‘ ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •ํ•˜๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์ธ CONTINUE IDENTITY๋Š” ์‹œํ€€์Šค ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. DELETE๋Š” ์‹œํ€€์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • MySQL: TRUNCATE๋Š” AUTO_INCREMENT ์นด์šดํ„ฐ๋ฅผ ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    DELETE๋Š” ์นด์šดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹ค์Œ ์‚ฝ์ž…๋˜๋Š” ํ–‰์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ๋†’์•˜๋˜ ๊ฐ’์—์„œ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.
  • SQL Server: TRUNCATE๋Š” IDENTITY ์ปฌ๋Ÿผ์„ ์›๋ž˜์˜ ์‹œ๋“œ(seed) ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    DELETE๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. DELETE ์ดํ›„์— IDENTITY ๊ฐ’์„ ์žฌ์„ค์ •ํ•˜๋ ค๋ฉด DBCC CHECKIDENT('table_name', RESEED, new_value) ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Oracle: ์‹œํ€€์Šค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋ณ„๊ฐœ์˜ ๊ฐ์ฒด์ด๋ฏ€๋กœ TRUNCATE๊ฐ€ ์ž๋™์œผ๋กœ ์‹œํ€€์Šค๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์‹œํ€€์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•˜๊ณ  ์žฌ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์ตœ์‹  ๋ฒ„์ „(18c ์ด์ƒ)์—์„œ๋Š” ALTER SEQUENCE... RESTART๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DELETE๋Š” ์‹œํ€€์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋กœ๊น… ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ

TRUNCATE๊ฐ€ '๋กœ๊น…๋˜์ง€ ์•Š๋Š”๋‹ค'๋Š” ์˜คํ•ด์™€ ๋‹ฌ๋ฆฌ, ๋ชจ๋“  TRUNCATE ์ž‘์—…์€ ์–ด๋–ค ํ˜•ํƒœ๋กœ๋“  ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜คํ•ด์˜ ์ด์œ ๋Š” ๋กœ๊น…๋˜๋Š” ๋‚ด์šฉ์˜ ์ƒ์„ธ ์ˆ˜์ค€ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • DELETE ๋กœ๊น…: ์‚ญ์ œ๋œ ๊ฐ ํ–‰์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ์‹œ์  ๋ณต๊ตฌ(Point-in-Time Recovery, PITR)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DELETE ์ง์ „์˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ๊ทธ๋ฅผ ์—ญ์œผ๋กœ ์žฌ์ƒํ•˜์—ฌ DELETE ์ž‘์—…์„ '์ทจ์†Œ'ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TRUNCATE ๋กœ๊น…: ํŽ˜์ด์ง€/์ต์Šคํ…ํŠธ์˜ ํ• ๋‹น ํ•ด์ œ ์ •๋ณด๋งŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ์Šคํ…œ ์žฅ์•  ์‹œ ๋ณต๊ตฌ(TRUNCATE๊ฐ€ ์™„์ „ํžˆ ์™„๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ๋ณด์žฅ)์™€ ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ(์ง€์›๋˜๋Š” DBMS์˜ ๊ฒฝ์šฐ)์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • PITR์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ: TRUNCATE๋Š” ํ–‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๊ทธ์— ๋‚จ๊ธฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๋งŒ์œผ๋กœ๋Š” TRUNCATE ์ง์ „ ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ TRUNCATE๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ, TRUNCATE๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ด์ „์— ์ƒ์„ฑ๋œ ๋ฐฑ์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณต์›ํ•œ ํ›„ ์›ํ•˜๋Š” ์‹œ์ ๊นŒ์ง€ ๋กค ํฌ์›Œ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— TRUNCATE๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ์†์‹ค ๋ณต๊ตฌ๋Š” DELETE์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๊ณ  ์‹œ์Šคํ…œ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ž‘์—…์ด ๋ฉ๋‹ˆ๋‹ค.

4. DELETE, TRUNCATE ์‚ฌ์šฉ 

์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ๊ธฐ์ˆ ์  ์ฐจ์ด์ ์„ ๋ฐ”ํƒ•์œผ๋กœ, ๊ฐ€์ƒ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ• ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4.1. ETL ํ”„๋กœ์„ธ์Šค์—์„œ ์Šคํ…Œ์ด์ง• ํ…Œ์ด๋ธ” ๋น„์šฐ๊ธฐ

  • ๊ถŒ์žฅ: TRUNCATE
  • ์ด์œ : ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์†๋„๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ…Œ์ด์ง• ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ๋ฅผ ์œ„ํ•ด ๋น ๋ฅด๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ๋น„์›Œ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. TRUNCATE์˜ ์••๋„์ ์ธ ์„ฑ๋Šฅ, ์ฆ‰๊ฐ์ ์ธ ๊ณต๊ฐ„ ํšŒ์ˆ˜, IDENTITY ๊ฐ’ ์ดˆ๊ธฐํ™”๋Š” ETL ์ž‘์—…์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ์•ˆ์ „์„ฑ์€ ๋ณดํ†ต ETL ์ž‘์—… ์ „์ฒด์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์€ ์Šคํ…Œ์ด์ง• ํ…Œ์ด๋ธ”์— ๊ฑฐ์˜ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4.2. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”

  • ๊ถŒ์žฅ: TRUNCATE
  • ์ด์œ : ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊นจ๋—ํ•œ ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. TRUNCATE๋Š” ํ…Œ์ด๋ธ”์„ ๋น ๋ฅด๊ฒŒ ๋น„์šธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, IDENTITY๋‚˜ AUTO_INCREMENT ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋งค ํ…Œ์ŠคํŠธ๊ฐ€ ์ผ๊ด€๋œ ์กฐ๊ฑด์—์„œ ์‹œ์ž‘๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

4.3. ์šด์˜ ํ™˜๊ฒฝ์˜ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์—์„œ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ ์•„์นด์ด๋น™ ๋˜๋Š” ์‚ญ์ œ

  • ๊ถŒ์žฅ: DELETE (๋ฐฐ์น˜ ์ฒ˜๋ฆฌ)
  • ์ด์œ : ์ด ์ž‘์—…์€ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•˜๋ฏ€๋กœ WHERE ์ ˆ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค (์˜ˆ: WHERE created_at < '2022-01-01'). TRUNCATE๋Š” ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ•œ ๋ฒˆ์— ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ DELETEํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๊ฐ€ ํญ์ฆํ•˜๊ณ  ์žฅ์‹œ๊ฐ„ ์ž ๊ธˆ์ด ๋ฐœ์ƒํ•˜์—ฌ ์šด์˜ ์‹œ์Šคํ…œ์— ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ DELETE๋ฅผ ์ˆ˜์ฒœ์—์„œ ์ˆ˜๋งŒ ๊ฑด ๋‹จ์œ„์˜ ์ž‘์€ ๋ฐฐ์น˜(batch)๋กœ ๋‚˜๋ˆ„์–ด ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ณ  ๊ฐ ๋ฐฐ์น˜๋งˆ๋‹ค COMMITํ•˜๋Š” ์ „๋žต์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

4.4. ์‹ค์‹œ๊ฐ„ ์šด์˜ ์ค‘์ธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • ๊ถŒ์žฅ: ์‹ ์ค‘ํ•œ ์ ‘๊ทผ ํ•„์š” (์ฃผ๋กœ ๋ฐฐ์น˜ DELETE) + DBMS ํŠน์„ฑ ๊ณ ๋ ค
  • ์ด์œ : ๋งค์šฐ ์œ„ํ—˜ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ๋™์‹œ์„ฑ์„ ๋ฐ˜๋“œ์‹œ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์•ž์„œ ์„ค๋ช…ํ•œ ๋ฐฐ์น˜ DELETE ๋ฐฉ์‹์ด ์œ ์ผํ•œ ์„ ํƒ์ง€์ž…๋‹ˆ๋‹ค. ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ์˜ ์„œ๋น„์Šค ์ค‘๋‹จ(์œ ์ง€๋ณด์ˆ˜ ์‹œ๊ฐ„)์ด ํ—ˆ์šฉ๋œ๋‹ค๋ฉด TRUNCATE๊ฐ€ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋•Œ DBMS์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MySQL์ด๋‚˜ Oracle์—์„œ๋Š” ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ TRUNCATE ์‹คํ–‰ ํ›„ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์น˜๋ช…์ ์ธ ์ƒํƒœ์— ๋†“์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ:

https://www.cybertec-postgresql.com/en/postgresql-delete-vs-truncate/

 

PostgreSQL: DELETE vs. TRUNCATE

Archiving and database cleanup in PostgreSQL: Find out how DELETE and TRUNCATE compare in terms of performance and how the magic works

www.cybertec-postgresql.com

https://www.rockdata.net/docs/17/sql-createtrigger.html

 

PostgreSQL 17 Documentation: CREATE TRIGGER - Redrock Postgres

CREATE TRIGGER CREATE TRIGGER — define a new trigger Synopsis CREATE [ OR REPLACE ] [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] } ON table_name [ FROM referenced_table_name ] [ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALL

www.rockdata.net

 

https://dev.mysql.com/doc/refman/9.4/en/truncate-table.html

 

MySQL :: MySQL 9.4 Reference Manual :: 15.1.42 TRUNCATE TABLE Statement

15.1.42 TRUNCATE TABLE Statement TRUNCATE [TABLE] tbl_name TRUNCATE TABLE empties a table completely. It requires the DROP privilege. Logically, TRUNCATE TABLE is similar to a DELETE statement that deletes all rows, or a sequence of DROP TABLE and CREATE

dev.mysql.com

https://learn.microsoft.com/en-us/sql/t-sql/statements/truncate-table-transact-sql?view=sql-server-ver17

 

TRUNCATE TABLE (Transact-SQL) - SQL Server

TRUNCATE TABLE removes all rows from a table or specified partitions of a table.

learn.microsoft.com

https://stackoverflow.com/questions/3256242/pros-cons-of-truncate-vs-delete-from

 

Pros & Cons of TRUNCATE vs DELETE FROM

Could someone give me a quick overview of the pros and cons of using the following two statements: TRUNCATE TABLE dbo.MyTable vs DELETE FROM dbo.MyTable It seems like they both do the same thing ...

stackoverflow.com

 

728x90