From 20b923f432a7a2b48d20c044347f0cc05fa025c2 Mon Sep 17 00:00:00 2001 From: cavidelizade Date: Fri, 17 Jul 2026 01:11:34 +0400 Subject: [PATCH 1/2] perf(api): index the module join tables module_issues, module_members and module_links had no indexes, so every lookup by module_id or issue_id was a sequential scan, while the cycle join tables already have the equivalent indexes. Add them in migration 000014. This covers the index half of #346. The N+1 association loading it also mentions is a larger refactor and is left for a follow-up. Refs #346 Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/api/migrations/000014_module_join_indexes.down.sql | 4 ++++ apps/api/migrations/000014_module_join_indexes.up.sql | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 apps/api/migrations/000014_module_join_indexes.down.sql create mode 100644 apps/api/migrations/000014_module_join_indexes.up.sql diff --git a/apps/api/migrations/000014_module_join_indexes.down.sql b/apps/api/migrations/000014_module_join_indexes.down.sql new file mode 100644 index 00000000..dfbde6b7 --- /dev/null +++ b/apps/api/migrations/000014_module_join_indexes.down.sql @@ -0,0 +1,4 @@ +DROP INDEX IF EXISTS idx_module_issues_module; +DROP INDEX IF EXISTS idx_module_issues_issue; +DROP INDEX IF EXISTS idx_module_members_module; +DROP INDEX IF EXISTS idx_module_links_module; diff --git a/apps/api/migrations/000014_module_join_indexes.up.sql b/apps/api/migrations/000014_module_join_indexes.up.sql new file mode 100644 index 00000000..2ae32a87 --- /dev/null +++ b/apps/api/migrations/000014_module_join_indexes.up.sql @@ -0,0 +1,8 @@ +-- The module join tables had no indexes, so every lookup by module_id or +-- issue_id did a sequential scan (ListModuleIssueIDs, RemoveModuleIssue, +-- CountIssuesByModuleIDs, ListMemberIDsByModuleIDs, the progress join, etc.). +-- The cycle join tables already have the equivalent indexes; add them here. +CREATE INDEX IF NOT EXISTS idx_module_issues_module ON module_issues (module_id); +CREATE INDEX IF NOT EXISTS idx_module_issues_issue ON module_issues (issue_id); +CREATE INDEX IF NOT EXISTS idx_module_members_module ON module_members (module_id); +CREATE INDEX IF NOT EXISTS idx_module_links_module ON module_links (module_id); From 38602a59e33e78d8211e0c19dd1930b8c69ffb36 Mon Sep 17 00:00:00 2001 From: martian56 Date: Sun, 25 Oct 2026 12:12:45 +0400 Subject: [PATCH 2/2] fix(db): renumber module join index migration to 000016 000014 and 000015 are now taken on main (Slack integration, cancelled-state re-fix); a duplicate version stops golang-migrate from loading migrations. Co-Authored-By: Claude Opus 5.5 --- ..._join_indexes.down.sql => 000016_module_join_indexes.down.sql} | 0 ...dule_join_indexes.up.sql => 000016_module_join_indexes.up.sql} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename apps/api/migrations/{000014_module_join_indexes.down.sql => 000016_module_join_indexes.down.sql} (100%) rename apps/api/migrations/{000014_module_join_indexes.up.sql => 000016_module_join_indexes.up.sql} (100%) diff --git a/apps/api/migrations/000014_module_join_indexes.down.sql b/apps/api/migrations/000016_module_join_indexes.down.sql similarity index 100% rename from apps/api/migrations/000014_module_join_indexes.down.sql rename to apps/api/migrations/000016_module_join_indexes.down.sql diff --git a/apps/api/migrations/000014_module_join_indexes.up.sql b/apps/api/migrations/000016_module_join_indexes.up.sql similarity index 100% rename from apps/api/migrations/000014_module_join_indexes.up.sql rename to apps/api/migrations/000016_module_join_indexes.up.sql