Sorgu Optimizasyonu

Snowflake ile Veri Modellemesine Giriş

Nuno Rocha

Director of Engineering

Sorgu yürütme sırası

Sorgu yürütme sırası, tam sorgu

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (1)

Sorgu yürütme sırası; FROM

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (2)

Sorgu yürütme sırası; JOIN

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (3)

Sorgu yürütme sırası; WHERE

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (4)

Sorgu yürütme sırası; TOPLAMALAR

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (5)

Sorgu yürütme sırası; HAVING

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (6)

Sorgu yürütme sırası; SIRALA

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (7)

Sorgu yürütme sırası; LIMIT

Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sırası (8)

Nihai sorgu yürütme sırası

  • EN İYİ UYGULAMALAR:
    • SELECT * kullanmayın; yalnızca gerekli sütunları belirtin
    • Veri hacmini azaltmak için LIMIT uygulayın
    • Satırları erken filtrelemek ve belleği korumak için WHERE kullanın
    • İşlemeyi iyileştirmek için daraltılmış veri üzerinde GROUP BY ve toplamalar kullanın
Snowflake ile Veri Modellemesine Giriş

Alt sorgular

Alt sorgu gösterimi

Snowflake ile Veri Modellemesine Giriş

Alt sorgular

Otel zinciri sadakat veri modeli

Snowflake ile Veri Modellemesine Giriş

Alt sorgular

  • 1000’den fazla sadakat puanı olan tüm misafirleri sorgulayın
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Snowflake ile Veri Modellemesine Giriş

Ortak tablo ifadeleri

CTE

Snowflake ile Veri Modellemesine Giriş

Ortak tablo ifadeleri

  • En son rezervasyon ayrıntılarını sorgulayın
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;
Snowflake ile Veri Modellemesine Giriş

CTE’ler ve alt sorgular

CTE’ler

  • Artıları

    • Karmaşık sorgularda okunabilirliği artırır
    • Aynı sorguda yeniden kullanılabilirlik sağlar
    • SQL sorgularını daha düzenli yapar
  • Eksileri

    • Performans yükü getirebilir
    • Yalnızca tek bir sorgunun kapsamıyla sınırlıdır

Alt sorgular

  • Artıları

    • Tek seferlik durumlarda basit ve doğrudandır
    • SQL ifadesinin çeşitli bölümlerinde esnektir
  • Eksileri

    • Karmaşıklık arttıkça okunabilirliği azaltabilir
    • İç içe kullanımlarda olası performans sorunları
Snowflake ile Veri Modellemesine Giriş

Sorgu yürütme sürelerini görselleştirme

Sorgu profil sayfası

Snowflake ile Veri Modellemesine Giriş

Terimler ve işlevlere genel bakış

  • Sorgu Optimizasyonu: Verimi ve performansı en üst düzeye çıkarmak için sorguları iyileştirme
  • Alt sorgu: Ana sorgu içinde belirli veriye odaklanan küçük sorgu
  • Ortak Tablo İfadeleri (CTE): Sorgu sırasında geçici sanal tablo
  • WITH .. AS: CTE tanımlamak için SQL komutu
  • LIMIT: Sonuçlardaki satır sayısını sınırlar
  • HAVING: SUM, MAX vb. ile toplanan veriyi filtreler
  • WHERE: Gruplamadan önce satırları filtreler, verimliliği artırır
Snowflake ile Veri Modellemesine Giriş

Örnek CTE ve alt sorgu şablonu

  • Alt sorgu
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;
Snowflake ile Veri Modellemesine Giriş

Haydi pratik yapalım!

Snowflake ile Veri Modellemesine Giriş

Preparing Video For Download...