SQL алгоритм выполения
Есть запрос вида
with myselect as (select *
from table1
where column1 = 1)
select *
from table2
where column21 in (select column11
from myselect)
and column22 in (select column12
from myselect);
Это тоже самое что
select *
from table2
where column21 in (select column11
from table1
where column1 = 1)
and column22 in (select column12
from table1
where column1 = 1);
Во втором случае, насколько я понимаю, сначала выполнится один встроенный селект с таблицы column11, потом другой с той же таблицы и после верхний запрос с table2.
Как будет работать запрос в первом случае. Он сначала выберет с table1, потом будет в подзапросах выбирать с уже выбранного набора или же это синтетический сахар и все-равно будет выбирать каждый раз в подзапросах с table1? Может кто подскажет по алгоритму выполнения?
Ответы (1 шт):
План выполнения что гадать, нужно посмотреть как посоветовал правильно @Akina
Это все хорошо то что вы делаете попробуйте так тоже
select distinct table2.*
from table2
Inner join table1 AS table11
On table11.column11 = table2.column21
AND table11.column1 = 1
Inner join table1 AS table12
On table12.column12 = table2.column22
AND table12.column1 = 1
вот статья тоже по данному вопросу, я понимаю что у вас случай когда вы подготовили CTE и нет, и найдет ли общее оптимизатор. Но почитать всё же можно думаю