Вы должны протестировать любой запрос к вашим данным и базе данных.
Я ожидал бы, что not exists
будет работать немного лучше:
Select a.*
from table_a a
where not exists (select 1 from table_b b where b.id = a.id) and
not exists (select 1 from table_c c where c.id = a.id) and
not exists (select 1 from table_d d where d.id = a.id) ;
В частности , это может использовать индексы для table_b(id)
, table_c(id)
и table_d(id)
. К тому же семантика яснее. NOT IN
с подзапросами может возвращать (или не возвращать!) Странные результаты, когда подзапрос возвращает NULL
.
Тем не менее, я ожидал, что получение правильного запроса будет быстрее, чем создание таблицы и последующее удаление строк . Последнее, казалось бы, связано с множеством "подработок" - добавлением строк в таблицу только для их удаления.