mirror of
https://github.com/isledecomp/isle.pizza.git
synced 2026-05-25 13:16:33 +00:00
Index memory_completions(event_id, completed_at) for delete reconcile (#36)
Some checks failed
Build / build (push) Has been cancelled
Some checks failed
Build / build (push) Has been cancelled
The account-deletion reconcile in account.ts uses a correlated subquery to pick the latest-per-event row from memory_completions. Without an index whose leading column is event_id the inner subquery falls back to scanning sqlite_autoindex_memory_completions_1, making the reconcile O(rows^2) — observed cost in production was ~171k rows read for one deletion against ~407 rows. With this covering index the inner becomes a seek and the reconcile drops to ~rows*log(rows).
This commit is contained in:
parent
37a36e287b
commit
364911dc9e
@ -0,0 +1,7 @@
|
|||||||
|
-- Index on (event_id, completed_at DESC) for memory_completions.
|
||||||
|
-- Speeds up the per-event "latest row" lookup used by the account-deletion
|
||||||
|
-- reconcile in account.ts (the correlated subquery in
|
||||||
|
-- INSERT INTO memory_events ... SELECT ... WHERE id = (SELECT id FROM mc2 ...)).
|
||||||
|
-- Without this index that subquery is O(rows^2); with it, O(rows * log rows).
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_memory_completions_event_completed
|
||||||
|
ON memory_completions(event_id, completed_at DESC);
|
||||||
Loading…
Reference in New Issue
Block a user