Оптимізація запитів

Вступ до моделювання даних у Snowflake

Nuno Rocha

Director of Engineering

Порядок виконання запиту

Порядок виконання запиту, повний запит

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (1)

Порядок виконання запиту; FROM

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (2)

Порядок виконання запиту; JOIN

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (3)

Порядок виконання запиту; WHERE

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (4)

Порядок виконання запиту; AGGREGATIONS

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (5)

Порядок виконання запиту; HAVING

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (6)

Порядок виконання запиту; SORT

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (7)

Порядок виконання запиту; LIMIT

Вступ до моделювання даних у Snowflake

Порядок виконання запиту (8)

Остаточний порядок виконання запиту

  • НАЙКРАЩІ ПРАКТИКИ:
    • Уникайте SELECT *; вказуйте лише потрібні стовпці
    • Застосовуйте LIMIT, щоб зменшити обсяг даних
    • Використовуйте WHERE рано для фільтрації рядків і економії пам'яті
    • Застосовуйте GROUP BY з агрегаціями на звужених наборах даних для оптимізації обробки
Вступ до моделювання даних у Snowflake

Підзапити

Подання підзапиту

Вступ до моделювання даних у Snowflake

Підзапити

Модель даних програми лояльності готельної мережі

Вступ до моделювання даних у Snowflake

Підзапити

  • Витягніть усіх гостей, які мають понад 1000 балів лояльності
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Вступ до моделювання даних у Snowflake

Загальні табличні вирази

CTE

Вступ до моделювання даних у Snowflake

Загальні табличні вирази

  • Отримайте дані про найпізніше бронювання
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

CTE та підзапити

CTE

  • Переваги

    • Підвищує читабельність складних запитів
    • Дозволяє повторно використовувати в межах одного запиту
    • Поліпшує структуру SQL-запитів
  • Недоліки

    • Може створювати накладні витрати на продуктивність
    • Обмежений сферою одного запиту

Підзапити

  • Переваги

    • Просте й пряме рішення для разових випадків
    • Гнучкі в різних частинах SQL-виразу
  • Недоліки

    • Зі зростанням складності знижують читабельність
    • Можливі проблеми продуктивності з вкладеними випадками
Вступ до моделювання даних у Snowflake

Візуалізація часу виконання запитів

Візуалізація часу виконання запиту

Вступ до моделювання даних у Snowflake

Огляд термінів і функцій

  • Оптимізація запитів: налаштування запитів для максимальної ефективності й продуктивності
  • Підзапит: менший запит усередині основного для фокусування на потрібних даних
  • Загальні табличні вирази (CTE): тимчасова віртуальна таблиця під час виконання запиту
  • WITH .. AS: команда SQL для визначення CTE
  • LIMIT: обмежує кількість рядків у результаті запиту
  • HAVING: фільтрує дані після агрегації функціями на кшталт SUM, MAX тощо
  • WHERE: фільтрує рядки до групування, підвищуючи ефективність
Вступ до моделювання даних у Snowflake

Шаблони CTE та підзапиту

  • Підзапит
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

Давайте потренуємось!

Вступ до моделювання даних у Snowflake

Preparing Video For Download...