From ef7fe6e079f89c70e89cf797017e3d5441257030 Mon Sep 17 00:00:00 2001 From: Deeman Date: Tue, 24 Feb 2026 19:32:15 +0100 Subject: [PATCH] perf: add missing indexes on lead_requests, suppliers, credit_ledger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New migration 0021 adds 7 indexes for columns used in WHERE clauses across admin list routes and the worker refill handler: - lead_requests(lead_type) — for all lead-type filters - lead_requests(lead_type, status) — compound filter in lead queries - lead_requests(lead_type, verified_at) — refill eligibility queries - lead_requests(country) — country filter in lead results - suppliers(tier) — tier filter in supplier admin list - suppliers(claimed_by) — claimed/unclaimed filter - credit_ledger(supplier_id) — SUM(delta) balance aggregation Co-Authored-By: Claude Opus 4.6 --- .../versions/0021_add_performance_indexes.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 web/src/padelnomics/migrations/versions/0021_add_performance_indexes.py diff --git a/web/src/padelnomics/migrations/versions/0021_add_performance_indexes.py b/web/src/padelnomics/migrations/versions/0021_add_performance_indexes.py new file mode 100644 index 0000000..98e4772 --- /dev/null +++ b/web/src/padelnomics/migrations/versions/0021_add_performance_indexes.py @@ -0,0 +1,41 @@ +"""Add missing indexes identified in performance review. + +Columns used in WHERE clauses across admin and worker routes that +lacked indexes and would cause full table scans as the tables grow. +""" + + +def up(conn) -> None: + # lead_requests: filtered by lead_type, status, verified_at, country + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_lead_requests_lead_type" + " ON lead_requests(lead_type)" + ) + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_lead_requests_type_status" + " ON lead_requests(lead_type, status)" + ) + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_lead_requests_type_verified" + " ON lead_requests(lead_type, verified_at)" + ) + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_lead_requests_country" + " ON lead_requests(country)" + ) + + # suppliers: filtered by tier and claimed_by in admin list + worker refill + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_suppliers_tier" + " ON suppliers(tier)" + ) + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_suppliers_claimed_by" + " ON suppliers(claimed_by)" + ) + + # credit_ledger: balance queries sum delta grouped by supplier_id + conn.execute( + "CREATE INDEX IF NOT EXISTS idx_credit_ledger_supplier" + " ON credit_ledger(supplier_id)" + )