Database Query Optimization

Reduced query time from 8s to 200ms through indexing and caching

PostgreSQLGoRedis

Pain Points

  • ⚠️Slow dashboard loading (8+ seconds)
  • ⚠️Database CPU at 85% during peak
  • ⚠️Complex JOIN queries causing locks

Solutions & Critical Thinking

  • Created composite indexes
  • Implemented Redis caching
  • Refactored N+1 queries

Problem

Reporting dashboard with 8+ second load times and high database CPU usage.

Solution

Index Optimization

CREATE INDEX idx_users_status_created 
  ON users(status, created_at);

CREATE INDEX idx_orders_user_id 
  ON orders(user_id);

Query Refactoring

func GetUserStats(db *sql.DB) ([]UserStat, error) {
    query := `
        SELECT u.id, u.name,
               COUNT(o.id) as orders,
               SUM(o.total) as revenue
        FROM users u
        LEFT JOIN orders o ON u.id = o.user_id
        GROUP BY u.id
    `
    rows, err := db.Query(query)
    return stats, nil
}

Results

  • Query time: 8.2s → 0.2s (97% improvement)
  • CPU usage: 85% → 35%
  • Cache hit rate: 92%