Optymalizacja zapytań

Wprowadzenie do modelowania danych w Snowflake

Nuno Rocha

Director of Engineering

Kolejność wykonania zapytania

Kolejność wykonania zapytania, pełne zapytanie

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (1)

Kolejność wykonania zapytania; FROM

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (2)

Kolejność wykonania zapytania; JOIN

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (3)

Kolejność wykonania zapytania; WHERE

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (4)

Kolejność wykonania zapytania; AGREGACJE

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (5)

Kolejność wykonania zapytania; HAVING

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (6)

Kolejność wykonania zapytania; SORT

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (7)

Kolejność wykonania zapytania; LIMIT

Wprowadzenie do modelowania danych w Snowflake

Kolejność wykonania zapytania (8)

Ostateczna kolejność wykonania zapytania

  • NAJLEPSZE PRAKTYKI:
    • Unikać SELECT *; wskazywać tylko niezbędne kolumny
    • Stosować LIMIT, aby ograniczyć wolumen danych
    • Używać WHERE wcześnie do filtrowania wierszy i oszczędzania pamięci
    • Stosować GROUP BY z agregacjami na zawężonych zbiorach danych
Wprowadzenie do modelowania danych w Snowflake

Podzapytania

Reprezentacja podzapytania

Wprowadzenie do modelowania danych w Snowflake

Podzapytania

Model danych programu lojalnościowego sieci hotelowej

Wprowadzenie do modelowania danych w Snowflake

Podzapytania

  • Pobierz wszystkich gości z więcej niż 1000 punktami lojalnościowymi
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Wprowadzenie do modelowania danych w Snowflake

Wspólne wyrażenia tabelowe

CTE

Wprowadzenie do modelowania danych w Snowflake

Wspólne wyrażenia tabelowe

  • Pobierz szczegóły ostatniej rezerwacji
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;
Wprowadzenie do modelowania danych w Snowflake

CTE i podzapytania

CTE

  • Zalety

    • Zwiększa czytelność złożonych zapytań
    • Umożliwia wielokrotne użycie w tym samym zapytaniu
    • Poprawia organizację zapytań SQL
  • Wady

    • Może powodować narzut wydajnościowy
    • Ograniczone do zakresu jednego zapytania

Podzapytania

  • Zalety

    • Proste i bezpośrednie w przypadkach jednorazowego użycia
    • Elastyczne w różnych częściach instrukcji SQL
  • Wady

    • Może obniżać czytelność przy złożonych zapytaniach
    • Potencjalne problemy z wydajnością przy zagnieżdżaniu
Wprowadzenie do modelowania danych w Snowflake

Wizualizacja czasu wykonania zapytań

Strona profilu zapytania

Wprowadzenie do modelowania danych w Snowflake

Przegląd terminologii i funkcji

  • Optymalizacja zapytań: Dostrajanie zapytań w celu maksymalizacji wydajności
  • Podzapytanie: Mniejsze zapytanie wewnątrz głównego zapytania, skupiające się na konkretnych danych
  • Wspólne wyrażenia tabelowe (CTE): Tymczasowa tabela wirtualna w ramach zapytania
  • WITH .. AS: Polecenie SQL definiujące CTE
  • LIMIT: Klauzula SQL ograniczająca liczbę zwracanych wierszy
  • HAVING: Klauzula SQL filtrująca dane zagregowane funkcjami takimi jak SUM, MAX itp.
  • WHERE: Klauzula SQL filtrująca wiersze przed grupowaniem, zwiększająca wydajność zapytania
Wprowadzenie do modelowania danych w Snowflake

Przykładowe szablony CTE i podzapytania

  • Podzapytanie
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;
Wprowadzenie do modelowania danych w Snowflake

Czas na ćwiczenia!

Wprowadzenie do modelowania danych w Snowflake

Preparing Video For Download...