Python Brasil 2025

Banco tá lento né? Vamo otimizar isso aí!
21/10/2025 , Impacta - Sala 204

Utilizando os dados do Censo de 2022 do IBGE, aprenderemos a avaliar performance de um banco de dados transacionais (com Postgres, mas os conceitos servem para os demais), melhorar e prever gargalos.


Este tutorial vai te ensinar como analisar queries lentas, identificar estruturas de tabelas problemáticas, otimizá-las e mitigar problemas futuros. E o melhor de tudo? Usando nossa querida Django ORM (e uns brinquedinhos especiais).

  • Como a Django ORM abstrai as interações com o banco de dados
  • Otimizações básicas para o dia a dia
  • N+1: Por que ainda falamos sobre ele?
  • O estranho relacionamento do Postgres e o count()
  • Diferença prática entre select_related e prefetch_related
  • Indexação de Banco de Dados (BTree vs BRIN vs Hash)
  • Plano de Execução de Queries (Ou: Como o Dalibo mudou minha vida)
  • Transações e suas peculiaridades
  • Estratégias de Cacheamento
  • O parente distante: Particionamento de tabelas

Quais conhecimentos prévios são necessários para que seja possível acompanhar bem a sua atividade?

Monto minhas talks com a intenção que possam ser consumidas por pessoas com o menor nível de conhecimento possível, portanto acredito que sejam:

  • Conhecimento básico de Django e da Django ORM
  • Noções de Banco de Dados Relacionais
  • Entender o básico de tipos de dados dos models
  • Entender o básico de relacionamento entre Models (OneToMany e ManyToMany)
  • Entender o mínimo de transações de banco de dados
  • Saber executar um serviço no docker compose.
Escolha uma ou mais áreas em que essa proposta se encaixa

Ciência e Análise de Dados, Desenvolvimento Web, Outros

O que as pessoas que participarem podem esperar aprender na sua atividade?
  • Como funciona o query builder do Django e seu comportamento.
  • O que evitar ao modelar seus dados (com a ajuda do dbdiagram.io).
  • Otimizações básicas: only, defer, values, values_list e annotations.
  • Diferenças entre prefetch_related e select_related, e quando usá-los.
  • Comportamento do Django com .first() e a dificuldade do Postgres em contar.
  • Indexação e os tipos básicos de índices no Postgres (BTree, BRIN e HASH).
  • Explicação sobre planos de execução de queries, como encontrá-los e como interpretá-los (com o auxílio do explain.dalibo.com).
  • O papel das transações na otimização de bancos.
  • Estratégias de cacheamento (Materialized Views e Django Cache).
  • Particionamento de tabelas: casos de uso e como fazer (usando django-postgres-extras).
Veja também:

Sou pythonista há 9 anos e programador a 15. Acredito no acesso gratuito ao conhecimento e caminho para cada dia estar mais próximo a programas de mentoria. Gosto de meias.