Optimizarea interogărilor

Introducere în modelarea datelor în Snowflake

Nuno Rocha

Director of Engineering

Ordinea de execuție a interogării

Ordinea de execuție a interogării, interogare completă

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (1)

Ordinea de execuție a interogării; FROM

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (2)

Ordinea de execuție a interogării; JOIN

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (3)

Ordinea de execuție a interogării; WHERE

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (4)

Ordinea de execuție a interogării; AGREGĂRI

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (5)

Ordinea de execuție a interogării; HAVING

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (6)

Ordinea de execuție a interogării; SORT

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (7)

Ordinea de execuție a interogării; LIMIT

Introducere în modelarea datelor în Snowflake

Ordinea de execuție a interogării (8)

Ordinea finală de execuție a interogării

  • BUNE PRACTICI:
    • Evitați SELECT *; specificați doar coloanele necesare
    • Folosiți LIMIT pentru a reduce volumul de date
    • Aplicați clauza WHERE devreme pentru filtrarea rândurilor și economisirea memoriei
    • Utilizați GROUP BY cu agregări pe seturi de date restrânse pentru a optimiza procesarea
Introducere în modelarea datelor în Snowflake

Subinterogări

Reprezentarea subinterogării

Introducere în modelarea datelor în Snowflake

Subinterogări

Modelul de date al programului de fidelitate hotelier

Introducere în modelarea datelor în Snowflake

Subinterogări

  • Interogați toți oaspeții cu mai mult de 1000 de puncte de fidelitate
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Introducere în modelarea datelor în Snowflake

Expresii de tabel comune

CTE

Introducere în modelarea datelor în Snowflake

Expresii de tabel comune

  • Interogați cele mai recente detalii de rezervare
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;
Introducere în modelarea datelor în Snowflake

CTE-uri și subinterogări

CTE-uri

  • Avantaje

    • Îmbunătățesc lizibilitatea pentru interogări complexe
    • Permit reutilizarea în aceeași interogare
    • Organizează mai bine interogările SQL
  • Dezavantaje

    • Pot introduce supraîncărcare a performanței
    • Limitate la domeniul unei singure interogări

Subinterogări

  • Avantaje

    • Simple și directe pentru cazuri de utilizare unică
    • Flexibile în diferite părți ale unei instrucțiuni SQL
  • Dezavantaje

    • Pot reduce lizibilitatea pe măsură ce crește complexitatea
    • Probleme potențiale de performanță cu instanțe imbricate
Introducere în modelarea datelor în Snowflake

Vizualizarea timpilor de execuție a interogărilor

Pagina profilului de interogare

Introducere în modelarea datelor în Snowflake

Prezentare generală a terminologiei și funcțiilor

  • Optimizarea interogărilor: Ajustarea interogărilor pentru maximizarea eficienței și performanței
  • Subinterogare: O interogare mai mică în interiorul unei interogări principale, focalizată pe date specifice
  • Expresii de tabel comune (CTE): Tabel virtual temporar în cadrul unei interogări
  • WITH .. AS: Comandă SQL pentru definirea unui CTE
  • LIMIT: Clauză SQL care limitează numărul de rânduri returnate
  • HAVING: Clauză SQL pentru filtrarea datelor agregate cu funcții precum SUM, MAX etc.
  • WHERE: Clauză SQL pentru filtrarea rândurilor înainte de grupare, îmbunătățind eficiența interogării
Introducere în modelarea datelor în Snowflake

Șablon exemplu pentru CTE și subinterogare

  • Subinterogare
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;
Introducere în modelarea datelor în Snowflake

Să exersăm!

Introducere în modelarea datelor în Snowflake

Preparing Video For Download...