Modelagem de dados

Estudo de Caso: Otimização de Consultas SQL em Sistema de Vendas

Nome do Aluno: Rolf Heinz Rostock

Curso: Sistemas de Internet – 4A – 2025/2

Disciplina: Modelagem de Dados


1. Contextualização

Atuando como analista de banco de dados, realizei uma intervenção técnica em um sistema de gestão de vendas utilizado por uma empresa, que apresentava lentidão em duas áreas críticas:

  • Geração de Relatórios de Vendas;
  • Processamento de Novos Pedidos.

Esses gargalos estavam impactando diretamente a eficiência dos processos internos. Com base na análise do problema, foi desenvolvido um sistema interativo para demonstrar, na prática, como otimizações por meio de índices e ajustes em consultas SQL podem melhorar significativamente o desempenho do banco de dados.

2. Criação e Otimização de Índices

O primeiro passo foi identificar colunas frequentemente utilizadas como filtro em consultas, especialmente com cláusulas WHERE. Com base nas tabelas vendas, pedidos e produtos, foram criados os seguintes índices:

CREATE INDEX idx_vendas_data_venda ON vendas (data_venda);
CREATE INDEX idx_pedidos_data ON pedidos (data_pedido);
CREATE INDEX idx_produtos_nome ON produtos (nome_produto);

Esses índices foram criados automaticamente por meio do sistema desenvolvido, que oferece suporte visual para criação, exclusão e verificação do uso de índices. A aplicação também permite remover todos os índices com prefixo idx_ para comparação justa entre execuções com e sem índice.

3. Revisão e Simplificação de Consultas SQL

A consulta inicial fornecida foi:

SELECT * FROM vendas WHERE data_venda BETWEEN '2023-01-01' AND '2023-01-31';

A estrutura da consulta é válida, mas sem um índice sobre a coluna data_venda, o SGBD realizaria uma varredura completa na tabela. Com a criação do índice idx_vendas_data_venda, essa mesma consulta passou a ser executada de forma otimizada, utilizando busca por intervalo com o índice (range scan).

O sistema desenvolvido permite escolher a tabela, tipo de filtro (por data, por cliente ou por vendedor + data), e executar a mesma consulta com ou sem índice, possibilitando a medição precisa do ganho de desempenho.

4. Análise de Planos de Execução (EXPLAIN)

Para analisar o comportamento da consulta, foi utilizada a instrução:

EXPLAIN SELECT * FROM vendas WHERE data_venda BETWEEN '2023-01-01' AND '2023-01-31';

O sistema mostra automaticamente o resultado do EXPLAIN, exibindo as colunas id, type, table, key, rows e Extra.

Resultados observados:

  • Sem índice: o plano indicava varredura completa da tabela (type = ALL).
  • Com índice: o plano mudou para type = range, utilizando o índice idx_vendas_data_venda, com redução do número de linhas examinadas e ganho significativo de performance.

Essa análise foi automatizada no sistema, que também calcula o tempo médio de execução com e sem índice, e o exibe em um gráfico comparativo gerado com Chart.js.

5. Desenvolvimento de Sistema de Demonstração

Repositório no GitHub

Para evidenciar todos os conceitos na prática, foi desenvolvido um sistema web completo com as seguintes funcionalidades:

  • Interface gráfica em Bootstrap 5 com suporte a modo escuro;
  • Execução de consultas SQL simuladas com base em dados massivos;
  • Criação e remoção de índices por meio de botões interativos;
  • Visualização do plano de execução (EXPLAIN) e tempo médio de execução;
  • Gráfico de barras comparativo entre “Com Índice” e “Sem Índice”;
  • População automatizada de tabelas com até 250.000 registros;
  • Uso de JavaScript com fetch() e exibição de resultados em tempo real.

6. Conclusão e Resultados Obtidos

Os testes demonstraram que o uso de índices otimizou significativamente a performance das consultas. Em alguns casos, o tempo médio foi reduzido em mais de 80%. A análise com EXPLAIN confirmou que os índices estavam sendo utilizados corretamente, substituindo varreduras completas por buscas otimizadas.

Além disso, o sistema desenvolvido não apenas solucionou o problema descrito na situação-problema, como também se tornou uma ferramenta didática para explorar o impacto de índices em tempo real, sendo útil tanto para aprendizado quanto para aplicação profissional.