Database Query Optimization

Key strategies for database optimization:

Index Strategy

-- Composite indexes (order matters)
CREATE INDEX idx_user_status_created ON users(status, created_at);

-- Partial indexes for better performance
CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';

-- Covering indexes
CREATE INDEX idx_user_profile ON users(id) INCLUDE (name, email, status);

Query Optimization Patterns

-- Use EXISTS instead of IN for subqueries
SELECT * FROM users u 
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);

-- Avoid functions in WHERE clauses
-- Bad: WHERE YEAR(created_at) = 2024
-- Good: WHERE created_at >= '2024-01-01' AND created_at < '2025-01-01'

-- Use LIMIT for large result sets
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20 OFFSET 0;

Connection Pooling

  • Set appropriate pool size (usually 10-20 connections)
  • Monitor connection usage
  • Use connection timeouts
  • Close connections properly

Monitoring Queries

  • Use EXPLAIN ANALYZE to understand query execution
  • Monitor slow query logs
  • Set up alerts for long-running queries
  • Track query performance over time