Psaní optimálních dotazů

Introduction to Redshift

Jason Myers

Principal Engineer

Omezte počet sloupců

  • Vyhněte se SELECT *
  • Nevybírejte sloupce, které nepotřebujete
    • Redshift je sloupcová databáze – data načítá po sloupcích
Introduction to Redshift

Používejte DISTKEY a SORTKEYs

Používejte v následujících klauzulích, kdykoli je to možné

  • JOIN
  • WHERE
  • GROUP BY

 

Používejte SORTKEYs ve správném pořadí v ORDER BY

  • Optimalizováno: sortkey_1, sortkey_2, sortkey_3
  • Neoptimalizováno: sort_key_1, sort_key_3

Distribuované dotazy

Introduction to Redshift

Tvorba kvalitních predikátů

  • Používejte DISTKEY a SORTKEY
  • Umístěte je co nejblíže ke spojení tabulek
  • Nevyužívejte v nich funkce
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 to Redshift

Zachovávejte konzistentní pořadí sloupců

Při použití:

  • GROUP BY
  • ORDER BY

Špatně

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

Správně

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

Používejte poddotazy uvážlivě

  • Místo poddotazů používejte vhodné strategie spojení
  • Při ověřování výsledku poddotazu používejte EXISTS
    SELECT column_name
    FROM table_name
    WHERE EXISTS
      (SELECT column_name 
       FROM table_name 
       WHERE active is True);
    
  • Při opakovaném použití poddotazů využijte CTE a jejich ukládání do mezipaměti
Introduction to Redshift

Pojďme si procvičit!

Introduction to Redshift

Preparing Video For Download...