거의 항상: AUTOINCREMENT 쓰지 마
SQLite 에 AUTOINCREMENT 키워드는 있는데, semantic 이 사람들이 기대하는 것보다 미묘하고 default 동작보다 느려.
- Default INTEGER PRIMARY KEY — SQLite 가 다음 사용 가능 rowid 를 고름. row 삭제하면 엔진이 그 id 재사용 가능.
- INTEGER PRIMARY KEY AUTOINCREMENT — 보장 추가: id 가 monotonically increasing, 삭제 후에도 재사용 안 함. 내부
sqlite_sequence테이블이 max-ever rowid 추적.
비용: insert 마다 sqlite_sequence 건드리니 page write 추가. 이득은 거의 필요 없음 — 대부분 앱 코드가 'DB 가 id 재사용 안 하는 거' 에 의존 안 해. 글로벌 unique id 필요하면 TEXT 컬럼에 UUID + WITHOUT ROWID.
Warning: 테이블에 AUTOINCREMENT commit 하면 CTAS dance 없이는 못 빠져나와. 진짜 no-reuse 보장 필요한지 미리 결정.