Rédiger des requêtes optimales

Introduction à Redshift

Jason Myers

Principal Engineer

Limiter les colonnes

  • Évitez SELECT *
  • Ne sélectionnez pas de colonnes inutiles au résultat
    • Rappelez-vous que Redshift est columnaire et extrait les données par colonne
Introduction à Redshift

Utiliser DISTKEY et SORTKEYs

Utilisez-les dans les clauses suivantes dès que possible

  • JOIN
  • WHERE
  • GROUP BY

 

Respectez l'ordre des SORTKEYs dans ORDER BY

  • Très optimisé : sortkey_1, sortkey_2, sortkey_3
  • Peu optimisé : sort_key_1, sort_key_3

Requêtes distribuées

Introduction à Redshift

Formuler de bons prédicats

  • Utilisez DISTKEY et SORTKEY
  • Proches de la table jointe
  • Évitez d'y utiliser des fonctions
SELECT receipts.cookie_id, 
       sum(receipts.total)
FROM receipts
JOIN cookies ON receipts.cookie_id = cookies.cookie_id
  -- Keep cookies predicates in the join to push down to nodes holding the records for cookies
 AND cookies.available_on < '2023-11-14'
 AND cookies.end_of_sale IS null
-- Predicates that are not part of the join or on the joined table stay in the WHERE clause
WHERE receipts.order_time > '2023-11-13'
GROUP BY 1 ORDER BY 1;
Introduction à Redshift

Restez cohérent avec l'ordre des colonnes

Lorsque vous utilisez :

  • GROUP BY
  • ORDER BY

À éviter

GROUP BY col_one, col_two, col_three
ORDER BY col_two, col_three, col_one

Recommandé

GROUP BY col_two, col_three, col_one
ORDER BY col_two, col_three, col_one
Introduction à Redshift

Bien utiliser les sous-requêtes

  • Préférez de bonnes stratégies de jointure plutôt que d'utiliser une sous-requête par défaut
  • Utilisez EXISTS dans vos prédicats si vous vérifiez seulement la véracité du résultat d'une sous-requête
    SELECT column_name
    FROM table_name
    WHERE EXISTS
      (SELECT column_name 
       FROM table_name 
       WHERE active is True);
    
  • Si vous réutilisez des sous-requêtes, servez-vous de CTE pour profiter de la mise en cache
Introduction à Redshift

Passons à la pratique !

Introduction à Redshift

Preparing Video For Download...