From bb351d12931574712f3c10b32027ea27c438b2e2 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Mon, 8 Jun 2026 22:15:16 -0700 Subject: [PATCH] perf(db): add saves favorites ordering index --- ...saves_user_track_current_blocknumber_idx.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 ddl/migrations/0220_saves_user_track_current_blocknumber_idx.sql diff --git a/ddl/migrations/0220_saves_user_track_current_blocknumber_idx.sql b/ddl/migrations/0220_saves_user_track_current_blocknumber_idx.sql new file mode 100644 index 00000000..265adf57 --- /dev/null +++ b/ddl/migrations/0220_saves_user_track_current_blocknumber_idx.sql @@ -0,0 +1,17 @@ +-- Supports /v1/users/:id/favorites pagination: +-- +-- WHERE user_id = ? +-- AND is_delete = false +-- AND is_current = true +-- AND save_type = 'track' +-- ORDER BY blocknumber, save_item_id DESC +-- +-- The existing saves_user_idx is ordered by save_item_id before is_delete and +-- cannot satisfy the endpoint's blocknumber ordering, which showed up in prod +-- pg_stat_statements with high total temp I/O. +CREATE INDEX CONCURRENTLY IF NOT EXISTS saves_user_track_current_blocknumber_idx + ON public.saves USING btree (user_id, blocknumber, save_item_id DESC) + INCLUDE (created_at) + WHERE save_type = 'track' + AND is_current = true + AND is_delete = false;