Я хотел бы знать, приведет ли положение определенного условия фильтра в запросе к значительному различию производительности.
У меня есть пример таблицы - date_dim
: которая всегда будет содержать только 1 записьОтносительно текущей даты исполнения:
dt | frst_day_mth | last_day_mth
16/05/2019 | 01/05/2019 | 31/05/2019 -- Table always has only 1 row for that day
Теперь у меня есть запрос типа:
select a.id, b.name, c.salary
from tableA a
inner join tableB b
on a.id = b.id
inner join tableC c
on b.name = c.name
Теперь я должен применить условие фильтра даты, например tableA.eff_dt <= date_dim.last_mth_day
.У меня вопрос - какой вариант (ниже) будет лучшим с точки зрения производительности?Лучше ли поместить его в ON clause
в Join
(вариант 1) с subquery
, чтобы записи могли быть сокращены раньше, или применить его позже в предложении where
(вариант 2)?Таблицы A, B & C имеют около 20 строк Mil.Я использую Spark SQL.
Вариант 1:
select a.id, b.name, c.salary
from tableA a
inner join tableB b
on a.id = b.id
and a.eff_dt <= (select last_mth_day from date_dim) -- Using subquery early on
inner join tableC c
on b.name = c.name
Вариант 2:
select a.id, b.name, c.salary
from tableA a
inner join tableB b
on a.id = b.id
inner join tableC c
on b.name = c.name
cross join date_dim dt
where a.eff_dt <= dt.last_mth_day -- Using Later in WHERE clause
Пожалуйста, дайте мне знать ваши комментарии.