Optimisasi Kueri

Pengantar Pemodelan Data di Snowflake

Nuno Rocha

Director of Engineering

Urutan eksekusi kueri

Urutan eksekusi kueri, kueri lengkap

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (1)

Urutan eksekusi kueri; FROM

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (2)

Urutan eksekusi kueri; JOIN

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (3)

Urutan eksekusi kueri; WHERE

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (4)

Urutan eksekusi kueri; AGGREGATIONS

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (5)

Urutan eksekusi kueri; HAVING

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (6)

Urutan eksekusi kueri; SORT

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (7)

Urutan eksekusi kueri; LIMIT

Pengantar Pemodelan Data di Snowflake

Urutan eksekusi kueri (8)

Urutan eksekusi kueri final

  • PRAKTIK TERBAIK:
    • Hindari SELECT *; sebutkan kolom yang diperlukan saja
    • Terapkan LIMIT untuk mengurangi volume data
    • Gunakan WHERE sedini mungkin untuk memfilter baris dan menghemat memori
    • Gunakan GROUP BY dengan agregasi pada data yang sudah dipersempit untuk efisiensi
Pengantar Pemodelan Data di Snowflake

Subkueri

Representasi subkueri

Pengantar Pemodelan Data di Snowflake

Subkueri

Model data loyalitas jaringan hotel

Pengantar Pemodelan Data di Snowflake

Subkueri

  • Ambil semua tamu dengan lebih dari 1000 poin loyalitas
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Pengantar Pemodelan Data di Snowflake

Common Table Expression

CTE

Pengantar Pemodelan Data di Snowflake

Common Table Expression

  • Ambil detail pemesanan terbaru
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;
Pengantar Pemodelan Data di Snowflake

CTE dan subkueri

CTE

  • Kelebihan

    • Meningkatkan keterbacaan kueri kompleks
    • Dapat digunakan ulang dalam kueri yang sama
    • Memperbaiki organisasi kueri SQL
  • Kekurangan

    • Dapat menambah overhead kinerja
    • Terbatas pada lingkup satu kueri

Subkueri

  • Kelebihan

    • Sederhana dan langsung untuk sekali pakai
    • Fleksibel di berbagai bagian pernyataan SQL
  • Kekurangan

    • Menurunkan keterbacaan saat kompleks
    • Potensi masalah kinerja pada sarang berlapis
Pengantar Pemodelan Data di Snowflake

Visualisasi waktu eksekusi kueri

Halaman profil kueri

Pengantar Pemodelan Data di Snowflake

Ikhtisar istilah dan fungsi

  • Optimisasi Kueri: Penyempurnaan kueri untuk memaksimalkan efisiensi dan kinerja
  • Subkueri: Kueri kecil di dalam kueri utama untuk menargetkan data tertentu
  • Common Table Expression (CTE): Tabel virtual sementara saat kueri berjalan
  • WITH .. AS: Perintah SQL untuk mendefinisikan CTE
  • LIMIT: Klausa SQL yang membatasi jumlah baris hasil
  • HAVING: Klausa SQL untuk memfilter data yang sudah diagregasi (SUM, MAX, dll.)
  • WHERE: Klausa SQL untuk memfilter baris sebelum pengelompokan, meningkatkan efisiensi
Pengantar Pemodelan Data di Snowflake

Templat contoh CTE dan subkueri

  • Subkueri
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;
Pengantar Pemodelan Data di Snowflake

Ayo berlatih!

Pengantar Pemodelan Data di Snowflake

Preparing Video For Download...