Оптимизация запросов

Введение в моделирование данных в 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: предложение SQL, ограничивающее число строк в результатах запроса
  • HAVING: предложение SQL для фильтрации данных, агрегированных функциями SUM, MAX и др.
  • WHERE: предложение SQL для фильтрации строк до группировки, повышающее эффективность запроса
Введение в моделирование данных в 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...