Frågeoptimering

Introduktion till datamodellering i Snowflake

Nuno Rocha

Director of Engineering

Frågans exekveringsordning

Frågans exekveringsordning, fullständig fråga

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (1)

Frågans exekveringsordning; FROM

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (2)

Frågans exekveringsordning; JOIN

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (3)

Frågans exekveringsordning; WHERE

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (4)

Frågans exekveringsordning; AGGREGATIONS

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (5)

Frågans exekveringsordning; HAVING

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (6)

Frågans exekveringsordning; SORT

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (7)

Frågans exekveringsordning; LIMIT

Introduktion till datamodellering i Snowflake

Frågans exekveringsordning (8)

Slutlig exekveringsordning

  • BÄSTA PRAXIS:
    • Undvik SELECT *; ange endast nödvändiga kolumner
    • Använd LIMIT för att minska datamängden
    • Använd WHERE tidigt för radfiltrering och minneseffektivitet
    • Använd GROUP BY med aggregeringar på begränsade datamängder för bättre prestanda
Introduktion till datamodellering i Snowflake

Underfrågor

Representation av underfråga

Introduktion till datamodellering i Snowflake

Underfrågor

Datamodell för hotellkedjas lojalitetsprogram

Introduktion till datamodellering i Snowflake

Underfrågor

  • Hämta alla gäster med fler än 1 000 lojalitetspoäng
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Introduktion till datamodellering i Snowflake

Gemensamma tabelluttryck

CTE

Introduktion till datamodellering i Snowflake

Gemensamma tabelluttryck

  • Hämta de senaste bokningsuppgifterna
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;
Introduktion till datamodellering i Snowflake

CTE:er och underfrågor

CTE:er

  • Fördelar

    • Förbättrar läsbarheten för komplexa frågor
    • Möjliggör återanvändning inom samma fråga
    • Ger bättre struktur i SQL-frågor
  • Nackdelar

    • Kan ge prestandaoverhead
    • Begränsad till en enda frågas omfång

Underfrågor

  • Fördelar

    • Enkla och direkta för engångsanvändning
    • Flexibla i olika delar av en SQL-sats
  • Nackdelar

    • Kan försämra läsbarheten vid komplex logik
    • Risk för prestandaproblem vid nästlade instanser
Introduktion till datamodellering i Snowflake

Visualisering av frågans körtider

Sida för frågeprofil

Introduktion till datamodellering i Snowflake

Terminologi och funktionsöversikt

  • Frågeoptimering: Finjustering av frågor för maximal effektivitet och prestanda
  • Underfråga: En mindre fråga inuti en huvudfråga som fokuserar på specifik data
  • Gemensamma tabelluttryck (CTE:er): Temporär virtuell tabell under en fråga
  • WITH .. AS: SQL-kommando för att definiera en CTE
  • LIMIT: SQL-sats som begränsar antalet rader i frågeresultatet
  • HAVING: SQL-sats för att filtrera aggregerad data med funktioner som SUM, MAX m.fl.
  • WHERE: SQL-sats för att filtrera rader före gruppering, vilket förbättrar frågeprestandan
Introduktion till datamodellering i Snowflake

Exempelmallar för CTE och underfråga

  • Underfråga
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;
Introduktion till datamodellering i Snowflake

Nu kör vi en övning!

Introduktion till datamodellering i Snowflake

Preparing Video For Download...