Skip to content
This repository was archived by the owner on Jun 19, 2026. It is now read-only.

feat: Database indexing optimization for financial queries - #1061

Open
oldke766 wants to merge 1 commit into
rohitdash08:mainfrom
oldke766:feat/database-indexing-optimization
Open

feat: Database indexing optimization for financial queries#1061
oldke766 wants to merge 1 commit into
rohitdash08:mainfrom
oldke766:feat/database-indexing-optimization

Conversation

@oldke766

Copy link
Copy Markdown

Database Indexing Optimization for Financial Queries

Closes #128

Summary

Adds composite database indexes targeting the most frequent query patterns in the FinMind application, significantly improving performance for dashboard summaries, expense listing, recurring expense generation, and duplicate detection.

Changes

SQLAlchemy Model Indexes ()

  • Expense: 5 composite indexes covering dashboard aggregation, category breakdown, duplicate detection, recurring generation, and date-range filtering
  • Category: 2 indexes for user-scoped listing and uniqueness checks
  • RecurringExpense: user+active index for listing active items
  • Bill: user+active+due_date for upcoming bills dashboard query
  • Reminder: sent+send_at for pending reminders scheduler
  • AdImpression: created_at for time-range analytics
  • UserSubscription: user+active for active plan lookup
  • AuditLog: user_id and created_at for audit trail queries

SQL Migration ()

  • Idempotent migration script using CREATE INDEX IF NOT EXISTS
  • Safe to run on existing databases without downtime

Schema Update ()

  • Updated for fresh deployments to include all new indexes

Testing

  • 11 test cases in verifying:
    • All indexes exist on their respective tables
    • Index column order matches target query patterns
    • Dashboard summary, duplicate detection, and upcoming bills indexes cover the exact columns used in route handlers

Performance Impact

Query Pattern Before After
Dashboard summary (user + type + month) Full table scan Index seek
Expense listing by date range Partial (user+spent only) Composite index
Duplicate detection Full table scan Index seek
Upcoming bills Partial (user+due only) Composite with active filter
Category listing No index Index seek

Checklist

  • Production ready implementation
  • Includes tests (11 test cases)
  • Documentation updated (migration script with descriptions)
  • Backward compatible (additive only, no schema breaking changes)

…dash08#128)

Implements composite indexes targeting the most frequent query patterns:

Expense table (primary workhorse):
- ix_expenses_user_type_spent: dashboard monthly income/expense aggregation
- ix_expenses_user_category: category breakdown queries
- ix_expenses_user_date_amount: duplicate detection lookups
- ix_expenses_user_recurring_date: recurring expense generation checks

Other tables:
- ix_categories_user_id/name: category listing and uniqueness
- ix_recurring_user_active: active recurring expense listing
- ix_bills_user_active_due: upcoming bills dashboard query
- ix_reminders_sent_send_at: pending reminders scheduler
- ix_ad_impressions_created: time-range analytics
- ix_user_subscriptions_user_active: active plan lookup
- ix_audit_logs_user_id/created_at: audit trail queries

Includes:
- SQLAlchemy model index definitions
- SQL migration script (idempotent CREATE INDEX IF NOT EXISTS)
- schema.sql updates for fresh deployments
- 11 test cases verifying index existence and column coverage
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Database indexing optimization for financial queries

1 participant