Projeto · Banco de dados

Consulta SQL de 4,45 s para 0,21 s

A consulta que monta a ficha do cliente levava 4,45 segundos. Em vez de criar índice novo, troquei uma subconsulta agregada por LEFT JOIN LATERAL, e ela passou a levar 0,21 segundo.

Cliente
Reduzzi Brasil
Meu papel
Construí
Estado
Em produção, no banco unificado de atendimento e reuniões
Diagrama: um caminho longo e emaranhado entre duas tabelas é trocado por uma ligação reta e curta, em azul.

Contexto

Um banco que junta atendimento e reuniões

Na Reduzzi Brasil, as conversas de WhatsApp e as reuniões ficavam espalhadas. Montei um banco único para as duas. Um serviço em Docker atualiza esse banco a cada 20 minutos, e um LLM analisa cada conversa em 17 campos.

A ficha do cliente junta tudo isso, e a consulta que monta essa ficha é a consulta central do banco.

O problema

Quatro segundos para abrir uma ficha

Justamente a consulta central, a que monta a ficha de cada cliente, levava 4,45 segundos. Ela usava uma subconsulta agregada.

Meu papel

Construí

Medi a consulta, reescrevi e medi de novo. Trabalhei sozinho, sem outro engenheiro revisando.

A virada

Reescrever antes de indexar

  • Medi o tempo da consulta como ela estava: 4,45 segundos.
  • Troquei a subconsulta agregada por LEFT JOIN LATERAL.
  • Não criei índice novo. O ganho veio só da forma da consulta.
  • Medi de novo: 0,21 segundo.

Resultado

Antes e depois

  • de 4,45 segundos para 0,21 segundoTempo da consulta central da ficha do cliente.
  • 95%De queda no tempo da consulta.
  • 0 índices novosO ganho veio só da reescrita.
  • 11 h para cerca de 2 hNa rodada de análise do mesmo banco, quando passei de 8 para 24 chamadas simultâneas ao LLM.

Limites

O que este projeto não prova

  • É uma consulta, em um banco. Não é comparação com outros sistemas.
  • A medida é de antes e depois da reescrita, no mesmo banco. Não é teste de carga.
  • Trabalhei sozinho. Nenhum outro engenheiro revisou a consulta.

Stack

  • SQL
  • LEFT JOIN LATERAL
  • Docker
  • Python
  • LLM