Postgres에서 대량 DELETE가 위험한 이유는 MVCC 구조 때문입니다. DELETE는 데이터를 즉시 지우지 않고 '죽은 튜플(dead tuple)'로 표시만 합니다. 실제 공간 회수는 VACUUM이 담당하는데, 수백만 행을 지우면 테이블과 인덱스에 블로트(bloat)가 쌓이고, autovacuum이 이를 따라잡지 못해 성능이 악화됩니다. 게다가 대량 DELETE는 WAL 폭증, 긴 트랜잭션, 락 경합, 인덱스 비대화까지 동반합니다. 즉 DELETE의 비용은 '남기는 데이터'가 아니라 '지우는 데이터'에 비례해 커지며, 데이터가 늘수록 더 느려집니다. 반면 DROP TABLE은 파일을 통째로 제거하므로 데이터 양과 무관하게 거의 즉시 끝나는 사실상 유일한 '확장 가능한 삭제'입니다. 핵심 전략은 시간 등 기준으로 테이블을 파티셔닝해, 오래된 데이터를 DELETE하는 대신 해당 파티션을 통째로 DROP하는 것입니다. 로그·이벤트·세션처럼 주기적으로 대량 삭제가 필요한 데이터라면 설계 단계부터 파티셔닝을 고려하세요.