Escrevendo consultas otimizadas

Introdução ao Redshift

Jason Myers

Principal Engineer

Limite as colunas

  • Evite SELECT *
  • Não selecione colunas que não precisa no resultado
    • Lembre que o Redshift é colunar e busca dados por coluna
Introdução ao Redshift

Use DISTKEY e SORTKEYs

Use nas seguintes cláusulas sempre que possível

  • JOIN
  • WHERE
  • GROUP BY

 

Use SORTKEYs na mesma ordem em ORDER BY

  • Altamente otimizado sortkey_1, sortkey_2, sortkey_3
  • Não otimizado sort_key_1, sort_key_3

Consultas distribuídas

Introdução ao Redshift

Construindo bons predicados

  • Use DISTKEY e SORTKEY
  • Perto do join da tabela
  • Evite usar funções neles
SELECT receipts.cookie_id, 
       sum(receipts.total)
FROM receipts
JOIN cookies ON receipts.cookie_id = cookies.cookie_id
  -- Keep cookies predicates in the join to push down to nodes holding the records for cookies
 AND cookies.available_on < '2023-11-14'
 AND cookies.end_of_sale IS null
-- Predicates that are not part of the join or on the joined table stay in the WHERE clause
WHERE receipts.order_time > '2023-11-13'
GROUP BY 1 ORDER BY 1;
Introdução ao Redshift

Seja consistente na ordem das colunas

Ao usar:

  • GROUP BY
  • ORDER BY

Ruim

GROUP BY col_one, col_two, col_three
ORDER BY col_two, col_three, col_one

Bom

GROUP BY col_two, col_three, col_one
ORDER BY col_two, col_three, col_one
Introdução ao Redshift

Use subconsultas com cuidado

  • Use estratégias de join adequadas em vez de apenas subconsulta
  • Use EXISTS nos seus predicados quando só precisar verificar se a subconsulta é verdadeira
    SELECT column_name
    FROM table_name
    WHERE EXISTS
      (SELECT column_name 
       FROM table_name 
       WHERE active is True);
    
  • Se for reutilizar subconsultas, use CTEs para aproveitar o cache
Introdução ao Redshift

Vamos praticar!

Introdução ao Redshift

Preparing Video For Download...