>Portfólio Antônio R.
Engenharia de Dados

Otimização de Consulta SQL com CTE

Em cenários de Engenharia de Dados, consultas SQL complexas podem apresentar problemas de desempenho quando realizam múltiplas subconsultas, filtros repetidos e operações desnecessárias sobre grandes volumes de dados.

Otimização de Consulta SQL com CTE
Neste projeto, foi realizada a análise e otimização de uma consulta SQL pesada, utilizando CTEs (Common Table Expressions) para organizar as etapas de processamento e reduzir operações redundantes.

Problema
A consulta original concentrava diversas operações em uma única estrutura, dificultando a leitura e tornando o processamento mais complexo. Além disso, algumas informações eram calculadas ou filtradas repetidamente.

O objetivo foi transformar essa consulta em uma estrutura mais organizada, separando o processamento em etapas lógicas.

- Consulta pesada:
Nesse cenário, a tabela de vendas pode ser consultada repetidamente para cada cliente, aumentando o custo da operação conforme o volume de dados cresce.

- Consulta otimizada com CTE
A versão otimizada concentra o processamento das vendas em uma única etapa, agrupando os dados por cliente antes de realizar o JOIN.

Resultado
A otimização torna a consulta mais legível, estruturada e eficiente, além de facilitar futuras alterações e manutenção do código.

O projeto demonstra a aplicação prática de técnicas de otimização SQL e organização de consultas para cenários de processamento de dados.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
--  Consulta pesada

SELECT
    c.id_cliente,
    c.nome,
    (
        SELECT SUM(v.valor)
        FROM vendas v
        WHERE v.id_cliente = c.id_cliente
          AND v.status = 'APROVADA'
    ) AS total_vendas,
    (
        SELECT COUNT(*)
        FROM vendas v
        WHERE v.id_cliente = c.id_cliente
          AND v.status = 'APROVADA'
    ) AS quantidade_vendas
FROM clientes c
WHERE c.ativo = 1;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- Consulta otimizada com CTE

WITH vendas_agrupadas AS (
    SELECT
        id_cliente,
        SUM(valor) AS total_vendas,
        COUNT(*) AS quantidade_vendas
    FROM vendas
    WHERE status = 'APROVADA'
    GROUP BY id_cliente
)
SELECT
    c.id_cliente,
    c.nome,
    COALESCE(v.total_vendas, 0) AS total_vendas,
    COALESCE(v.quantidade_vendas, 0) AS quantidade_vendas
FROM clientes c
LEFT JOIN vendas_agrupadas v
    ON v.id_cliente = c.id_cliente
WHERE c.ativo = 1;