другой, есть ли какая-то принципиальная разница, если я это сделаю в формате обычного join и затем фильтрации:
SELECT name
FROM table_1
JOIN table_2 ON table_1.id = table_2.id
WHERE table_2.count > 10
или сделаю join с подзапросом, при этом фильтрация будет в подзапросе:
SELECT name
FROM table_1
JOIN (
SELECT id FROM table_2
WHERE count > 10
) ON table_1.id = table_2.id
второй вариант должен быть быстрее первого или такие штуки учитывает планировщик постгреса по дефолту и разницы не будет?
Планировщик сам сделает
Эти варианты всегда эквивалентны, насколько я помню. Т.е. сделать так, чтобы планировщик построил разные планы для них (если это всё — обычные таблицы и т.п.) просто не получится. И это потому, что это основа его архитектуры — все clauses при начальной обработке ("деконструкции") запроса разделяются на join clauses (где есть несколько таблиц отношений, вроде table_1.id = table_2.id ) и restriction clauses (где только одна, вроде table_2.count > 10), и последние связываются со "своими" отношениями, и дальнейшая обработка отталкивается от этого.
Обсуждают сегодня