Всё о соединениях

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

Amy McCarty

Instructor

Обзор курса

  • Структура запросов: соединения, подзапросы и временные таблицы
  • Ограничение и агрегирование данных
  • Свойства хранилища данных и инструменты оптимизации
  • Планирование и выполнение запросов
Оптимизация запросов в PostgreSQL

Планировщик запросов

Запрос

  • Инструкции SQL

Официант в ресторане

План (выполнения) запроса

  • Конкретные шаги

Несколько поваров у большого котла

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

Планировщик запросов

Официант несёт еду

Официант несёт напитки

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

 

Что такое соединения?

  • Объединяют несколько таблиц
Оптимизация запросов в PostgreSQL

 

Что такое соединения?

  • Объединяют несколько таблиц

Зачем использовать соединения?

  • Справочные таблицы
  • Объединение данных

Как?

  • Внутренние и внешние

 

ID продажи Дата заказа Сумма № клиента
01 2019-02-02 145.30 911

 

ID Имя Клиент с
911 Jim Smith 2019-01-01

 

ID продажи Дата заказа Сумма Имя
01 2019-02-02 145.30 Jim Smith
Оптимизация запросов в PostgreSQL

Внутренние соединения

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Оптимизация запросов в PostgreSQL

Внутренние соединения

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Последняя запись выделена жирным. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209. Последняя запись выделена жирным.

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Оптимизация запросов в PostgreSQL

Внутренние соединения с USING

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
Оптимизация запросов в PostgreSQL

Внутренние соединения с USING

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Последняя запись выделена жирным. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209. Последняя запись выделена жирным.

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
Оптимизация запросов в PostgreSQL

Левое внешнее соединение

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
Оптимизация запросов в PostgreSQL

Левое внешнее соединение

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209. Последняя запись выделена жирным.

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
Оптимизация запросов в PostgreSQL

Правое внешнее соединение

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
Оптимизация запросов в PostgreSQL

Правое внешнее соединение

Таблица athletes с четырьмя записями: спортсмен и страна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Последняя запись выделена жирным. Таблица countries с четырьмя записями: страна, название, население в миллионах. AUT — Austria — 9. IND — India — 1 339. RUS — Russia — 145. BRA — Brazil — 209.

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
Оптимизация запросов в PostgreSQL

Полное внешнее соединение

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • План (выполнения) запроса

Несколько поваров у большого котла

  • Ограничивает планировщик запросов
Athlete Nme Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
BRA Brazil 209
Оптимизация запросов в PostgreSQL

Давайте потренируемся!

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

Preparing Video For Download...