SQL оптимизация: JOIN vs подзапросы

JOIN вместо подзапроса

Мы уже изучили, что подзапросы можно использовать в WHERE, но достаточно часто их делать не стоит и вот почему.

Если мы захотим написать запрос:

select
    column1,
    column2
from
    table1
where column1 in (select column3 from table2)

То это не совсем эффективно, потому что в условии идет обращение к каждому значению подзапроса. 

Но если мы попытаемся решить задачу через INNER JOIN, а именно вот так

select
    column1,
    column2
from
    table1
join 
     table2 on table1.column1 = table2.column3

То по сути мы получим такой же результат, но работать такой запрос будет быстрее. 

Это происходит, потому что работа JOIN внутри устроена иначе и эффективнее, нежели простое сравнение 1-го значения с другим. Это мы еще успеем обсудить на уроке про оптимизацию.