Abfrageoptimierung

Einführung in das Data Modeling in Snowflake

Nuno Rocha

Director of Engineering

Reihenfolge der Abfrageausführung

Reihenfolge der Abfrageausführung, vollständige Abfrage

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (1)

Reihenfolge der Abfrageausführung; FROM

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (2)

Reihenfolge der Abfrageausführung; JOIN

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (3)

Reihenfolge der Abfrageausführung; WHERE

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (4)

Reihenfolge der Abfrageausführung; AGGREGATIONS

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (5)

Reihenfolge der Abfrageausführung; HAVING

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (6)

Reihenfolge der Abfrageausführung; SORT

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (7)

Reihenfolge der Abfrageausführung; LIMIT

Einführung in das Data Modeling in Snowflake

Reihenfolge der Abfrageausführung (8)

Endgültige Reihenfolge der Abfrageausführung

  • BEST PRACTICES:
    • Vermeide SELECT *; gib nur nötige Spalten an
    • Nutze LIMIT, um Datenmenge zu reduzieren
    • Setze WHERE früh ein, um Zeilen zu filtern und Speicher zu sparen
    • Verwende GROUP BY mit Aggregationen auf bereits eingeschränkten Daten
Einführung in das Data Modeling in Snowflake

Unterabfragen

Darstellung einer Unterabfrage

Einführung in das Data Modeling in Snowflake

Unterabfragen

Datenmodell: Hotelkette Loyalty

Einführung in das Data Modeling in Snowflake

Unterabfragen

  • Frage alle Gäste ab, die mehr als 1000 Loyalty-Punkte haben
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Einführung in das Data Modeling in Snowflake

Common Table Expressions

CTE

Einführung in das Data Modeling in Snowflake

Common Table Expressions

  • Ermittle die Details der letzten Buchung
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;
Einführung in das Data Modeling in Snowflake

CTEs und Unterabfragen

CTEs

  • Vorteile

    • Bessere Lesbarkeit bei komplexen Abfragen
    • Wiederverwendbar in derselben Abfrage
    • Verbessert die Struktur von SQL-Abfragen
  • Nachteile

    • Kann Performance-Overhead verursachen
    • Auf den Gültigkeitsbereich einer einzelnen Abfrage begrenzt

Unterabfragen

  • Vorteile

    • Einfach und direkt für Einmal-Einsätze
    • Flexibel in verschiedenen Teilen einer SQL-Anweisung
  • Nachteile

    • Geringere Lesbarkeit bei steigender Komplexität
    • Mögliche Performanceprobleme bei Verschachtelung
Einführung in das Data Modeling in Snowflake

Abfragezeiten visualisieren

Seite: Query-Profil

Einführung in das Data Modeling in Snowflake

Begriffe und Funktionsüberblick

  • Query Optimization: Feintuning von Abfragen für maximale Effizienz und Leistung
  • Unterabfrage: Kleinere Abfrage in einer Hauptabfrage, fokussiert auf bestimmte Daten
  • Common Table Expressions (CTEs): Temporäre virtuelle Tabelle während einer Abfrage
  • WITH .. AS: SQL-Befehl zum Definieren einer CTE
  • LIMIT: SQL-Klausel, die die Anzahl der Zeilen im Abfrageergebnis begrenzt
  • HAVING: SQL-Klausel zum Filtern aggregierter Daten mit Funktionen wie SUM, MAX usw.
  • WHERE: SQL-Klausel zum Filtern von Zeilen vor dem Gruppieren, steigert Effizienz
Einführung in das Data Modeling in Snowflake

Beispielvorlage: CTE und Unterabfrage

  • Unterabfrage
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;
Einführung in das Data Modeling in Snowflake

Lass uns üben!

Einführung in das Data Modeling in Snowflake

Preparing Video For Download...