All Stories
2-4-database-query-optimization-indexingDoneEpic 2.4
Story 2.4: Database Query Optimization and Strategic Indexing
Status: done
Tasks
- Task 1: Audit Existing Indexes and Query Patterns (AC: #1, #3)
- 1.1: Query `pg_indexes` to document current index coverage
- 1.2: Enable slow query logging in Supabase (threshold: 100ms)
- 1.3: Identify top 10 slowest queries from application logs
- 1.4: Map slow queries to missing indexes
- 1.5: Document N+1 patterns in current codebase (search for lazy loading)
- Task 2: Create Index Migration (AC: #1)
- 2.1: Create Alembic migration `add_performance_indexes`
- 2.2: Add users table indexes (email, role, created_at)
- 2.3: Add bets table composite indexes (3 indexes)
- 2.4: Add games table indexes including partial index for active games
- 2.5: Add transactions table composite indexes
- 2.6: Add agents table indexes
- 2.7: Use `CREATE INDEX CONCURRENTLY` to avoid table locks
- Task 3: Optimize Application Queries (AC: #2, #3)
- 3.1: Refactor user bet queries to use explicit JOINs
- 3.2: Add eager loading to agent customer relationship queries
- 3.3: Optimize dashboard metrics with batched queries
- 3.4: Add query hints where appropriate (e.g., index forcing)
- 3.5: Ensure all queries specify ORDER BY to leverage index ordering
- Task 4: Validate Index Usage (AC: #2, #5)
- 4.1: Run EXPLAIN ANALYZE on all critical queries
- 4.2: Document query plans showing index usage
- 4.3: Verify no sequential scans on large tables
- 4.4: Save before/after performance metrics
- Task 5: Health Monitoring Integration (AC: #4)
- 5.1: Add index statistics to `/health` endpoint
- 5.2: Query `pg_stat_user_indexes` for usage data
- 5.3: Implement index bloat detection query
- 5.4: Document maintenance procedures (REINDEX, VACUUM)
- Task 6: Testing and Load Validation (AC: #2, #5)
- 6.1: Write integration tests for query performance assertions
- 6.2: Run load test: 1,000 concurrent users for 10 minutes
- 6.3: Verify p95 query time <50ms in load test results
- 6.4: Confirm slow query count <5 per hour in logs
Progress
Tasks0/6
Acceptance Criteria0
Total Tasks6