Optimisation des requêtes

Introduction à la modélisation des données dans Snowflake

Nuno Rocha

Director of Engineering

Ordre d'exécution d'une requête

Ordre d'exécution d'une requête, requête complète

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (1)

Ordre d'exécution d'une requête ; FROM

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (2)

Ordre d'exécution d'une requête ; JOIN

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (3)

Ordre d'exécution d'une requête ; WHERE

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (4)

Ordre d'exécution d'une requête ; AGGREGATIONS

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (5)

Ordre d'exécution d'une requête ; HAVING

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (6)

Ordre d'exécution d'une requête ; TRI

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (7)

Ordre d'exécution d'une requête ; LIMIT

Introduction à la modélisation des données dans Snowflake

Ordre d'exécution (8)

Ordre d'exécution final d'une requête

  • PRATIQUES EXEMPLAIRES :
    • Évitez SELECT * ; indiquez seulement les colonnes nécessaires
    • Appliquez LIMIT pour réduire le volume de données
    • Utilisez WHERE tôt pour filtrer les lignes et économiser la mémoire
    • Faites GROUP BY avec agrégations sur un sous-ensemble restreint pour accélérer le traitement
Introduction à la modélisation des données dans Snowflake

Sous‑requêtes

Représentation d'une sous‑requête

Introduction à la modélisation des données dans Snowflake

Sous‑requêtes

Modèle de données de fidélité d'une chaîne hôtelière

Introduction à la modélisation des données dans Snowflake

Sous‑requêtes

  • Interroger tous les clients ayant plus de 1000 points de fidélité
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Introduction à la modélisation des données dans Snowflake

Expressions de table communes

CTE

Introduction à la modélisation des données dans Snowflake

Expressions de table communes

  • Obtenir les détails de la plus récente réservation
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;
Introduction à la modélisation des données dans Snowflake

CTE et sous‑requêtes

CTE

  • Avantages

    • Améliorent la lisibilité des requêtes complexes
    • Réutilisables dans la même requête
    • Mieux organiser les requêtes SQL
  • Inconvénients

    • Peuvent ajouter une surcharge de performance
    • Portée limitée à une seule requête

Sous‑requêtes

  • Avantages

    • Simples et directes pour un usage unique
    • Flexibles dans diverses parties d'une instruction SQL
  • Inconvénients

    • Lisibilité réduite quand la complexité augmente
    • Risques de performance avec des imbrications
Introduction à la modélisation des données dans Snowflake

Visualiser les temps d'exécution

Page du profil de requête

Introduction à la modélisation des données dans Snowflake

Aperçu : termes et fonctions

  • Optimisation des requêtes : réglage fin pour maximiser l'efficacité et la performance
  • Sous‑requête : petite requête imbriquée aidant à cibler des données précises
  • Expressions de table communes (CTE) : table virtuelle temporaire durant une requête
  • WITH .. AS : commande SQL pour définir une CTE
  • LIMIT : clause SQL limitant le nombre de lignes du résultat
  • HAVING : clause SQL pour filtrer des données agrégées (SUM, MAX, etc.)
  • WHERE : clause SQL filtrant les lignes avant l'agrégation, pour plus d'efficacité
Introduction à la modélisation des données dans Snowflake

Modèles de CTE et de sous‑requête

  • Sous‑requête
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;
Introduction à la modélisation des données dans Snowflake

Passons à la pratique !

Introduction à la modélisation des données dans Snowflake

Preparing Video For Download...