У меня есть следующий код:Почему subselect делает SQL-запрос медленнее?
select
*
from
table_1
join
table_2
on
table_1.col1 = table_2.col1
where
table_2.col2 = 1
Этот запрос работает, и дать мне результаты, которые я ожидаю. Теперь я хотел бы оптимизировать этот запрос. Идея заключается в том, что я пытаюсь сократить второй запрос до объединения двух таблиц. Другими словами, я полагаю, что «удаление» строк и объединение небольших таблиц должно быть быстрее, чем объединение больших таблиц, а затем выбор из них того, что мне нужно. Я реализую свою идею следующим образом:
select
*
from
table_1
join
(
select
*
from
table_2
where
table_2.col2 = 1
)
on
table_1.col1 = table_2.col1
Удивительно, что второй запрос значительно медленнее первого. Что я делаю не так?
Я бы назвал это очень слабым оптимизатором в Exasol. Разумные базы данных обычно создают один и тот же план выполнения для этих запросов. (Возможно, он построен на MySQL, который будет иметь тот же самый дефект в большинстве версий.) –