Pisanie optymalnych zapytań

Wprowadzenie do Redshift

Jason Myers

Principal Engineer

Ograniczanie kolumn

  • Unikać SELECT *
  • Nie wybierać kolumn, które nie są potrzebne w wyniku
    • Redshift jest kolumnowy i pobiera dane według kolumn
Wprowadzenie do Redshift

Używanie DISTKEY i SORTKEYs

Używać w następujących klauzulach, gdy to możliwe

  • JOIN
  • WHERE
  • GROUP BY

 

Używać SORTKEYs w kolejności w ORDER BY

  • Wysoko zoptymalizowane sortkey_1, sortkey_2, sortkey_3
  • Niezoptymalizowane sort_key_1, sort_key_3

Zapytania rozproszone

Wprowadzenie do Redshift

Budowanie dobrych predykatów

  • Używać DISTKEY i SORTKEY
  • Blisko złączenia tabeli
  • Unikać funkcji w predykatach
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;
Wprowadzenie do Redshift

Spójność kolejności kolumn

Przy użyciu:

  • GROUP BY
  • ORDER BY

Źle

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

Dobrze

GROUP BY col_two, col_three, col_one
ORDER BY col_two, col_three, col_one
Wprowadzenie do Redshift

Mądre używanie podzapytań

  • Stosować odpowiednie strategie złączeń zamiast podzapytań
  • Używać EXISTS w predykatach, gdy sprawdzamy tylko prawdziwość wyniku podzapytania
    SELECT column_name
    FROM table_name
    WHERE EXISTS
      (SELECT column_name 
       FROM table_name 
       WHERE active is True);
    
  • Jeśli podzapytania są wielokrotnie używane, stosować CTE, aby korzystać z buforowania
Wprowadzenie do Redshift

Czas na ćwiczenia!

Wprowadzenie do Redshift

Preparing Video For Download...