Otimização de consultas

Introdução à Modelagem de Dados no Snowflake

Nuno Rocha

Director of Engineering

Ordem de execução da consulta

Ordem de execução da consulta, consulta completa

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (1)

Ordem de execução da consulta; FROM

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (2)

Ordem de execução da consulta; JOIN

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (3)

Ordem de execução da consulta; WHERE

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (4)

Ordem de execução da consulta; AGGREGATIONS

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (5)

Ordem de execução da consulta; HAVING

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (6)

Ordem de execução da consulta; SORT

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (7)

Ordem de execução da consulta; LIMIT

Introdução à Modelagem de Dados no Snowflake

Ordem de execução da consulta (8)

Ordem final de execução da consulta

  • BOAS PRÁTICAS:
    • Evite usar SELECT *; especifique só as colunas necessárias
    • Aplique LIMIT para reduzir o volume de dados
    • Use WHERE cedo para filtrar linhas e economizar memória
    • Use GROUP BY com agregações em conjuntos reduzidos para otimizar o processamento
Introdução à Modelagem de Dados no Snowflake

Subconsultas

Representação de subconsulta

Introdução à Modelagem de Dados no Snowflake

Subconsultas

Modelo de dados do programa de fidelidade do hotel

Introdução à Modelagem de Dados no Snowflake

Subconsultas

  • Consultar todos os hóspedes com mais de 1000 pontos de fidelidade
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Introdução à Modelagem de Dados no Snowflake

Expressões de tabela comuns

CTE

Introdução à Modelagem de Dados no Snowflake

Expressões de tabela comuns

  • Consultar os detalhes da reserva mais recente
WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Introdução à Modelagem de Dados no Snowflake

CTEs e subconsultas

CTEs

  • Prós

    • Aumentam a legibilidade em consultas complexas
    • Permitem reutilização na mesma consulta
    • Melhoram a organização do SQL
  • Contras

    • Podem gerar sobrecarga de desempenho
    • Limitadas ao escopo de uma única consulta

Subconsultas

  • Prós

    • Simples e diretas para uso único
    • Flexíveis em várias partes de uma instrução SQL
  • Contras

    • Podem reduzir a legibilidade quando complexas
    • Risco de queda de desempenho com aninhamento
Introdução à Modelagem de Dados no Snowflake

Visualizando tempos de execução da consulta

Página de perfil da consulta

Introdução à Modelagem de Dados no Snowflake

Visão geral: termos e funções

  • Otimização de consultas: Ajustar consultas para máxima eficiência e desempenho
  • Subconsulta: Consulta menor dentro da principal para focar em dados específicos
  • Common Table Expressions (CTEs): Tabela virtual temporária durante uma consulta
  • WITH .. AS: Comando SQL para definir uma CTE
  • LIMIT: Cláusula SQL que limita o número de linhas no resultado
  • HAVING: Cláusula SQL para filtrar dados já agregados por SUM, MAX etc.
  • WHERE: Cláusula SQL para filtrar linhas antes do agrupamento, aumentando a eficiência
Introdução à Modelagem de Dados no Snowflake

Modelo de CTE e subconsulta

  • Subconsulta
SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
  • CTE
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Introdução à Modelagem de Dados no Snowflake

Vamos praticar!

Introdução à Modelagem de Dados no Snowflake

Preparing Video For Download...