Оптимизация запросов PostgreSQL: LATERAL JOIN или подзапрос

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам кажется, что подзапросы недостаточно гибки, LATERAL JOIN станет для вас надежным выбором, открывая возможность использования колонок из предыдущих таблиц в условиях соединения. Допустим, у нас есть таблица events и функция get_latest_event_info, которая использует event_id:

SQL
Скопировать код
SELECT e.id, e.name, li.info
FROM events e, LATERAL get_latest_event_info(e.id) AS li;

Здесь ключевое слово LATERAL позволяет функции get_latest_event_info использовать идентификатор события из e.id, в результате чего они работают как единое целое. 🌀

Кинга Идем в IT: пошаговый план для смены профессии

Когда стоит использовать LATERAL

LATERAL JOIN и обычные подзапросы подобны разным мантиям супергероев — подходят для различных ситуаций.

Расширьте возможности LATERAL для мнogоколоночных функций

В случае использования функции, которая возвращает несколько колонок или возвращает множество значений (например, unnest()), LATERAL просто необходим.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Когда результаты становятся пустыми

Если функция с множеством значений возвращает пустые результаты, что может привести к потере основной строки данных, LEFT JOIN LATERAL приходит на помощь, сохраняя ее для вас. 🎩

LATERAL как ускоритель выполнения запросов

Если медленное выполнение запросов вас раздражает, LATERAL может ускорить их выполнение, превращаясь из улитки в ракету. 🚀

Опасайтесь подводных камней LATERAL

У LATERAL также есть свои хитрости, которые важно знать.

Будьте внимательны с условиями JOIN

Использование LATERAL может ввести вас в заблуждение, что дополнительные условия при соединении не требуются. Всегда стоит проверить условия соединения дважды, особенно для INNER и OUTER версий LATERAL.

Проверяйте план выполнения запроса

Так же как и в финансах, в SQL важно контролировать расходы. Подзапросы в LATERAL могут выполняться несколько раз, что увеличивает общую нагрузку. Берегите ресурсы!

Используйте инструменты разумно

Не всегда необходимо использовать все доступные инструменты для решения задачи. В некоторых случаях достаточно обойтись обычным JOIN, WHERE или UNION, минуя LATERAL.

Визуализация

Представьте себе футбольный матч ⚽.

Подзапрос: это вратарь, который держит один и тот же тацтический план против любого нападающего.

LATERAL JOIN: это форварды, которые гибко меняют свою стратегию в зависимости от обороны, чтобы забить гол.

Взаимодействие LATERAL с другими инструментами SQL

LATERAL можно использовать совместно с другими инструментами SQL для создания сложных решений.

COALESCE и CASE в помощь при работе с пустыми значениями

Как обработать наборы данных, возвращающие пустые значения? Вы можете воспользоваться функциями COALESCE и CASE, которые оказываются мощным инструментом против "пустышек".

Выигрышная стратегия против корреляционных подзапросов

Вспомните игру "камень-ножницы-бумага". Использование LEFT JOIN LATERAL ... ON true позволяет одолеть корреляционные подзапросы, как бумага обхватывает камень.

Читаемость кода — ваш SQL EndGame

LATERAL может служить ценным инструментом для улучшения читаемости вашего SQL-кода, делая сложные запросы более понятными и защищая ваши SQL-скрипты от потенциальных угроз и ошибок.

Полезные материалы

  1. PostgreSQL: Documentation: 7.2. Table Expressions
  2. sql – What is the difference between a LATERAL JOIN and a subquery in PostgreSQL? – Stack Overflow
  3. LATERAL – PostgreSQL wiki
  4. Postgres 12 | db<>fiddle
  5. – YouTube
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Что такое LATERAL JOIN в PostgreSQL?
1 / 5