Backend

O que ninguém te conta sobre performance em banco de dados

Técnicas avançadas de otimização de queries e índices que fazem diferença real em produção.

28 de fevereiro de 20247 min de leitura

O problema real

Sua aplicação está lenta. Você olha os logs e descobre que uma query está demorando 3 segundos. E agora?

1. EXPLAIN é seu melhor amigo

Antes de otimizar, entenda o que está acontecendo:

EXPLAIN ANALYZE SELECT * FROM orders 
WHERE user_id = 123 
AND created_at > '2024-01-01';

Procure por:

  • Full table scans
  • Temporary tables
  • Filesort
  • 2. Índices estratégicos

    Índices errados são piores que nenhum índice:

    -- Índice composto na ordem certa
    CREATE INDEX idx_orders_user_date 
    ON orders(user_id, created_at);
    
    -- A ordem importa! user_id primeiro se é o mais seletivo

    3. N+1 é o vilão silencioso

    O problema mais comum em ORMs:

    // Ruim: N+1 queries
    const users = await User.findAll()
    for (const user of users) {
      const orders = await user.getOrders() // Query para cada user!
    }
    
    // Bom: Eager loading
    const users = await User.findAll({
      include: [Order]
    })

    4. Connection pooling

    Conexões são caras. Use pools:

    const pool = new Pool({
      max: 20,
      idleTimeoutMillis: 30000,
      connectionTimeoutMillis: 2000,
    })

    Conclusão

    Performance de banco de dados é sobre fazer menos trabalho, não trabalho mais rápido. Meça, analise e otimize com dados.

    ARTIGOS RELACIONADOS