Найти в Дзене

Оптимизируем SQL запросы

Кейс: использование подзапросов в джойнах обычно такое встречается, когда хотят соединить таблицу только на определенную выборку данных из другой таблицы Как переписать более оптимально: напиши обычный join, при этом добавь нужное условие соединения в on Избавляйтесь от подзапросов в джойнах когда это возможно. Эффективней будет дописать условие соединения, чем вызывать подзапрос --так не делай SELECT * FROM customer_reg r LEFT JOIN (SELECT * FROM customer_auth WHERE rn_first = 1) af ON r.customer_id = af.customer_id LEFT JOIN (SELECT * FROM customer_auth WHERE rn_last = 1) al ON r.customer_id = al.customer_id ; --делай так SELECT * FROM customer_reg r LEFT JOIN customer_auth af ON r.customer_id = af.customer_id AND af.rn_first = 1 LEFT JOIN customer_auth al ON r.customer_id = al.customer_id AND al.rn_last = 1

Оптимизируем SQL запросы

Кейс: использование подзапросов в джойнах

обычно такое встречается, когда хотят соединить таблицу только на определенную выборку данных из другой таблицы

Как переписать более оптимально: напиши обычный join, при этом добавь нужное условие соединения в on

Избавляйтесь от подзапросов в джойнах когда это возможно. Эффективней будет дописать условие соединения, чем вызывать подзапрос

--так не делай

SELECT *

FROM customer_reg r

LEFT JOIN (SELECT * FROM customer_auth WHERE rn_first = 1) af

ON r.customer_id = af.customer_id

LEFT JOIN (SELECT * FROM customer_auth WHERE rn_last = 1) al

ON r.customer_id = al.customer_id

;

--делай так

SELECT *

FROM customer_reg r

LEFT JOIN customer_auth af

ON r.customer_id = af.customer_id

AND af.rn_first = 1

LEFT JOIN customer_auth al

ON r.customer_id = al.customer_id

AND al.rn_last = 1