Optimalizace dotazů

Úvod do datového modelování ve Snowflake

Nuno Rocha

Director of Engineering

Pořadí vykonávání dotazu

Pořadí vykonávání dotazu, celý dotaz

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (1)

Pořadí vykonávání dotazu; FROM

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (2)

Pořadí vykonávání dotazu; JOIN

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (3)

Pořadí vykonávání dotazu; WHERE

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (4)

Pořadí vykonávání dotazu; AGREGACE

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (5)

Pořadí vykonávání dotazu; HAVING

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (6)

Pořadí vykonávání dotazu; SORT

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (7)

Pořadí vykonávání dotazu; LIMIT

Úvod do datového modelování ve Snowflake

Pořadí vykonávání dotazu (8)

Konečné pořadí vykonávání dotazu

  • DOPORUČENÉ POSTUPY:
    • Nepoužívejte SELECT *; zadejte pouze potřebné sloupce
    • Omezte objem dat pomocí LIMIT
    • Používejte WHERE pro včasné filtrování řádků a šetření paměti
    • Aplikujte GROUP BY s agregacemi na zúžených datových sadách
Úvod do datového modelování ve Snowflake

Poddotazy

Znázornění poddotazu

Úvod do datového modelování ve Snowflake

Poddotazy

Datový model věrnostního programu hotelového řetězce

Úvod do datového modelování ve Snowflake

Poddotazy

  • Dotaz na všechny hosty s více než 1000 věrnostními body
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Úvod do datového modelování ve Snowflake

Společné tabulkové výrazy

CTE

Úvod do datového modelování ve Snowflake

Společné tabulkové výrazy

  • Dotaz na nejnovější podrobnosti rezervace
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;
Úvod do datového modelování ve Snowflake

CTE a poddotazy

CTE

  • Výhody

    • Zlepšuje čitelnost složitých dotazů
    • Umožňuje opakované použití v rámci jednoho dotazu
    • Zpřehledňuje strukturu SQL dotazů
  • Nevýhody

    • Může zvyšovat výkonnostní nároky
    • Omezeno na rozsah jediného dotazu

Poddotazy

  • Výhody

    • Jednoduché a přímé pro jednorázové použití
    • Flexibilní v různých částech SQL příkazu
  • Nevýhody

    • Složitost snižuje čitelnost
    • Potenciální výkonnostní problémy při vnořování
Úvod do datového modelování ve Snowflake

Vizualizace doby vykonávání dotazů

Stránka profilu dotazu

Úvod do datového modelování ve Snowflake

Přehled terminologie a funkcí

  • Optimalizace dotazů: Ladění dotazů pro maximální efektivitu a výkon
  • Poddotaz: Menší dotaz uvnitř hlavního dotazu zaměřený na konkrétní data
  • Společné tabulkové výrazy (CTE): Dočasná virtuální tabulka v rámci dotazu
  • WITH .. AS: SQL příkaz pro definici CTE
  • LIMIT: SQL klauzule omezující počet řádků výsledků dotazu
  • HAVING: SQL klauzule pro filtrování agregovaných dat (SUM, MAX atd.)
  • WHERE: SQL klauzule pro filtrování řádků před seskupením, zvyšuje efektivitu
Úvod do datového modelování ve Snowflake

Vzorové šablony CTE a poddotazu

  • Poddotaz
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;
Úvod do datového modelování ve Snowflake

Pojďme si procvičit!

Úvod do datového modelování ve Snowflake

Preparing Video For Download...